会话变量在php中为空
login.php会话变量在php中为空,php,mysql,session-cookies,session-variables,session-state,Php,Mysql,Session Cookies,Session Variables,Session State,login.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
<?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页面会话变量没有打印出来。我不知道为什么,但这个问题不是每次登录时都会发生,有时会发生,所以我找不到问题所在。任何人都知道,请帮我解决这个问题。从您的login.php中删除ob_start()
不要将会话_start()放在所有文件中
e.g login.php, profile.php, etc
但是,将其添加到config.php中,例如:
<?php
session_start();
//.. config variables here
检查这是profile.php的最顶端,在此脚本之前的任何输出都将使标题无效。是否应该在标题之后退出?也用于密码而不是纯文本存储。根据脚本,如果会话变量不存在,则配置文件页面应重定向到登录页面。是重定向吗?是的!如果会话未设置,则为重定向警告:编写访问控制层并不容易,而且有很多机会使其严重出错。任何一款现代风格的手机都有内置的,你可以使用。至少绝对不要将密码存储为纯文本或弱散列(如SHA1或MD5)。是的,在删除ob_start()后,它可以正常工作。但是为什么ob_start会引起这样的问题呢?它不起作用,因为你需要使用它Ob_获取内容,Ob_结束刷新。在您的示例中,不需要输出缓冲区。但是,您可以在这里阅读更多关于它的信息