PHP会话变量未设置

时间:2015-12-27 11:57:42

标签: php variables session login

我创建了一个登录名,它将会话变量设置为我从数据库中获取的用户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()。我已经在每个页面上开始了一个会话。

1 个答案:

答案 0 :(得分:2)

这里似乎有两个问题。

首先是数组键;您在一个案例中使用user,在另一个案例中使用user_id

第二是投机;你说它导致一个空数组(我假设你有var_dump($_SESSION)或类似的确认这个?)。如果是这样,它表明你还没有开始会话。您需要致电session_start();才能访问会话数据。

每次运行脚本时,它都需要访问存储在服务器上的会话,这就是您运行session_start()的原因。长版本是它获取存储会话数据的本地文件的锁定(导致称为session locking的什么)。因此,当您使用$_SESSION超全局完成后,您可以(为了更长时间运行脚本和/或性能)致电session_write_close()