【问题标题】:session variables set but return blank会话变量已设置但返回空白
【发布时间】:2014-02-23 14:30:09
【问题描述】:

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

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

【问题讨论】:

  • cookie 是在哪里/如何创建的?如果没有创建 cookie,则不会设置会话,进而不会在下一页上显示会话 ID/名称。我在您的问题中没有看到 cookie 代码。我所看到的都是 cookie 相关的,正在检查是否设置了一个。
  • 剩下的代码在哪里?
  • 这只是为了检查用户是否已经登录或返回用户,cookie是在登录事件中设置的
  • 只是为了确保您在用户访问的每个页面的开头都有session_start();
  • 那么,您正在检查是否设置了两个 cookie,为什么要设置两个? 我讨厌晚上打高尔夫球,球永远不会落入(右)洞。

标签: php session


【解决方案1】:

Spitballin

  • 删除您包含的文件中&lt;?php 之前的所有空格(在本例中为login_check.php
  • 把这个放在前面 session_start() 防止cookie意外消失

    session_set_cookie_params(0);
    
  • 如果这没有帮助,您应该尝试在您的 URL 周围传递您的 SID(会话 ID),看看是否有帮助。如果您在 php.ini 文件中启用了session.use_trans_sid,并且您的 PHP 安装是使用配置 --enable-trans-id 编译的,那么默认情况下 SID 将包含在 URL 中. Check this page out for more information.

  • login_check.php 中删除不必要的 session_start(),因为它已经在原始页面上调用。

【讨论】:

  • 在 session_start(); 之前添加 session_set_cookie_params(0); 得到了相同的结果。没有空白。现在阅读如何在 URL 周围传递 SID
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
相关资源
最近更新 更多