会话变量设置但返回空白

时间:2014-01-31 01:18:11

标签: php session

我正在尝试创建登录流但是在设置会话变量时遇到问题

当用户点击页面时,我有一个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);
?>

1 个答案:

答案 0 :(得分:1)

Spitballin

  • 删除您提供的文件中的 <?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,因为它已在原始页面上调用过。