【问题标题】:Session data lost after page redirect页面重定向后会话数据丢失
【发布时间】:2017-09-11 14:14:02
【问题描述】:

我在获取简单会话数据值以在页面重定向后保持不变时遇到问题。一个函数检查通过 Post 发送的用户数据,如果它与数据库中的值匹配,它会将会话数据设置为这些值并重定向到另一个页面:

  if ($login_ok) {
      //set session data                
      $_SESSION ['online'] = 1;
      $_SESSION ['userid'] = $id;
      $_SESSION ['username'] =  $name;
      //redirect to new page
      redirect('start.php');
}

在新页面代码中没有设置会话数据。简单测试返回 null 值,就好像没有设置会话数据:

  echo 'Session Login Status: ' . $_SESSION ['online'];
  echo 'Session UserID: ' . $_SESSION ['userid'];
  echo 'Session Username: ' . $_SESSION ['username'];

用上面的 echo 语句替换重定向可以正常工作。在加载任何页面数据之前设置会话数据并激活重定向是否意味着未分配会话变量?

为确保活动会话始终可用,包含文件包含以下代码:

 if (session_status() == PHP_SESSION_NONE) {
    session_start();
  }

知道这里有什么问题吗?

非常感谢, 千瓦

【问题讨论】:

  • 您是否在 start.php 进行了测试以评论您的包含并编写 session_start();无条件?
  • @Fran Cerezo 通过相同的包含文件在 start.php 中运行相同的代码,即: if (session_status() == PHP_SESSION_NONE) { session_start(); }
  • 我的意思是做一个测试。无条件地创建 session_start(),或者创建一个 echo session_status()。也许 session_status 没有返回您所期望的。只是为了调试。
  • 没有任何区别。我回显了会话状态,它返回为活动状态。我制作了一对带有相互链接的简单页面,创建了一个会话变量并回显了结果。他们都将变量报告为未设置。只有在页面中设置 var 并回显才能返回数据。感谢您的帮助,但我仍然对这个问题感到困惑,并检查了我的文件中是否有一些可能导致此问题的代码,但一无所获。
  • 在本地主机上工作但不在远程服务器上工作很奇怪。您的主机是免费的还是付费的?如果付款,我会向管理员发送一张票。

标签: php session redirect


【解决方案1】:

检查会话是否在进行之前设置

if isset($_SESSION ['online']) and 
    isset($_SESSION ['userid']) and 
    isset($_SESSION ['username'])
{
    echo 'Session Login Status: ' . $_SESSION ['online'];
    echo 'Session UserID: ' . $_SESSION ['userid'];
    echo 'Session Username: ' . $_SESSION ['username'];
} else {
    echo 'Redirect to login or Session expired';
}

试试这个而不是重定向

$uid = $_SESSION['USERID'];
if (isset($uid) || $uid != NULL) 
{
 if (!headers_sent()) {
    header('Location:main.php');
    exit;
    }
    else {
    ?>
    <script>window.location = 'main.php';</script>
    <?php
    }
}

【讨论】:

  • 是的,正在评估已设置的变量,但重定向后它们不可用。感谢您的帮助。
【解决方案2】:

这似乎是服务器问题,而不是代码问题。在 localhost 服务器上运行代码可以正常工作。希望这对遇到类似问题的人有所帮助。

也就是说,我不知道如何设置远程服务器以允许会话数据。服务器有一个名为 cPanel 的基于浏览器的 Web 管理软件,有什么建议吗?

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多