我创建了一个登录名,它将会话变量设置为我从数据库中获取的用户ID。用户在输入详细信息后单击登录后,我将其重定向到主页,该主页使用会话变量来获取用户ID以供显示。我遇到的问题是会话变量。这就是我的代码看起来像(简化):
$_SESSION['user_id'] = $User_id;
header('Location: http://localhost/Projects/Login/home.php');
exit();
这是设置我的会话变量的代码片段,我已经测试了它的工作原理。下一段代码是从主页(home.php)调用的函数。它用于检查用户是否已登录
function logged_in(){
return isset($_SESSION['user_id']);
}
然后我使用这个if语句根据用户是否登录来执行不同的显示,再次简化它。
if( logged_in() === true ){
$session_user_id = $_SESSION['user'];
print "logged in";
}
else{
print "not logged in";
}
问题似乎是if语句,因为它将会话变量取消设置为空数组。如果我打印出会话变量,我得到Array()。我已经在每个页面上开始了一个会话。
答案 0 :(得分:2)
这里似乎有两个问题。
首先是数组键;您在一个案例中使用user
,在另一个案例中使用user_id
。
第二是投机;你说它导致一个空数组(我假设你有var_dump($_SESSION)
或类似的确认这个?)。如果是这样,它表明你还没有开始会话。您需要致电session_start();
才能访问会话数据。
每次运行脚本时,它都需要访问存储在服务器上的会话,这就是您运行session_start()
的原因。长版本是它获取存储会话数据的本地文件的锁定(导致称为session locking的什么)。因此,当您使用$_SESSION
超全局完成后,您可以(为了更长时间运行脚本和/或性能)致电session_write_close()
。