我正在尝试创建登录流但是在设置会话变量时遇到问题
当用户点击页面时,我有一个php文档检查用户是否已登录或是否设置了cookie以重新登录,
要检查的代码(简化)是:
<?php
session_start();
if (isset($_SESSION['uid'])) {
//logged in experience here
}
else {
if (isset($_COOKIE['uname']) && isset($_COOKIE['key'])) {
//query database to ensure valid credentials
if (<--valid-->){
$_SESSION['uid'] = $uid; //set session variables
$_SESSION['fname'] = $fname;
var_dump($_SESSION); //check to make sure variables set, this works
//logged in experience
}
else {
echo "error loggin in";
}
}
}
?>
在页面上的第一次点击,如果会话未设置,则转到cookie,然后设置会话变量。在索引页面上我print_r会话变量,我得到了所需的结果,导航离开页面后再使用同一子域内的文本链接再次调用php,这次设置$ _SESSION ['uid']但它返回为空白,如print_r所示。
所以问题是,在导航到当前没有触及会话的页面然后将变量设置为空白之间。我还通过访问一个触及会话变量的页面来测试它,它只是将会话变量设置为uniqid供我跟踪,并且该变量可以在索引页面上调用。此外,session_start()也在索引页面的顶部调用,
索引上的php就是
<?php
session_start();
require 'login_check.php';
print_r($_SESSION);
?>
答案 0 :(得分:1)
<?php
之前的任何空格(在本例中为login_check.php
) 将此内容放在 session_start()
之前,以防止Cookie意外消失
session_set_cookie_params(0);
如果这没有帮助,您应该尝试在您的网址周围传递SID
(会话ID),看看是否有帮助。如果您在 php.ini 文件中启用了session.use_trans_sid
,并且使用配置--enable-trans-id
编译了PHP安装,那么 SID 将包含在默认情况下的URL。的 Check this page out for more information. 强>
session_start()
删除不必要的 login_check.php
,因为它已在原始页面上调用过。