【发布时间】:2020-09-21 17:52:53
【问题描述】:
登录.php
<?php
ob_start();
session_start();
include '../config.php';
if( (isset($_SESSION['can-id']) )) {
header('location: ../home/profile.php');
}
if(isset($_POST['can-login']))
{
$email=$_POST['email'];
$password=$_POST['password'];
$sql="SELECT * FROM `user_credentials` WHERE `email`=:email AND `password`=:password";
$pdoResult=$conn->prepare($sql);
$pdoExec=$pdoResult->execute(array(":email"=>$email,":password"=>$password));
$pdoResult->setFetchMode(PDO::FETCH_ASSOC);
$count=0;
$uid='';
while ($r=$pdoResult->fetch()) {
# code...
$count+=1;
$uid=$r['email'];
}
if ($count==1) {
# code...
$_SESSION['can-id']=$uid;
header('location: ../home/profile.php');
}
else
{
$_SESSION['error']="login failed";
}
}
?>
<html>
....
</html>
profile.php
<?php
ob_start();
session_start();
if (!(isset($_SESSION['can-id']))) {
# code...
header('location: ../login/');
}
else
{
$cid=$_SESSION['can-id'];
}
?>
<h1 ><?php echo $cid;?></h1>
这是我登录页面后的代码,页面被重定向到 profile.php 页面,但在配置文件页面会话变量没有打印我不知道为什么,但每次登录时都不会出现这个问题它有时会发生我找不到问题所在。有谁知道请帮我解决问题。
【问题讨论】:
-
检查这是profile.php的最顶部,在这个脚本之前的任何输出都会使
header无效。exit应该在header之后?也使用password_hash 来存储密码而不是纯文本存储。 -
根据您的脚本,如果会话变量不存在,您的个人资料页面应该重定向到登录页面。是重定向吗?
-
是的!如果会话未设置,则会重定向
-
警告:编写访问控制层并不容易,而且有很多机会严重错误。任何现代的development framework 像Laravel 都带有一个内置的authentication system,并且有authentication libraries 可以使用。至少遵循recommended security best practices 并且永远不要将密码存储为纯文本 或像 SHA1 或 MD5 这样的弱哈希。
标签: php mysql session-cookies session-variables session-state