【问题标题】:Session variable isn't carrying over to next page - session_start() has been started会话变量未延续到下一页 - session_start() 已启动
【发布时间】:2015-06-02 21:38:45
【问题描述】:

我不确定为什么我的会话变量没有被转移到下一页。

session_start();已添加到两个页面,如果我在第一页转储会话,我会得到我期望的数组。

当我重定向到下一页时,session_id 保持不变,但数组为空。

代码如下:

session_start();

if (isset($_POST['submit'])){

  $price=check_input($_POST["price"]);
  $number=$_POST['number'];
  $activity=$_POST['activity'];

  $_SESSION['price']=$price;
  $_SESSION['number']=$number;
  $_SESSION['activity']=$activity;

  $index_query=mysql_query("SELECT id FROM activities WHERE people >= '$number' AND type='$activity' AND cost <= '$price' ORDER BY RAND() LIMIT 0,1;");
  $index_fetch=mysql_fetch_assoc($index_query);
  $activity_id=$index_fetch['id'];

  header("Location: activity.php?id=".$activity_id."");

}

现在,我在标题重定向上方添加了以下内容,以查看会话是否携带任何内容,并打印了正确的信息。

var_dump($_SESSION);
die();

但是,当我删除它并让它重定向到第 2 页时,:

session_start();

var_dump($_SESSION);

它给了我一个空数组。

有什么想法吗?

【问题讨论】:

  • 检查 session_id()。如果值在加载之间发生变化,那么您会以某种方式丢失会话 cookie 并每次都获得一个新的空会话。
  • 另外,我们不知道您的 POST 数组是否也是空的。使用错误报告会告诉你这一点。
  • 好吧,它们可能是空的,但它仍然会在会话中创建空值,并且这些值会显示在 var 转储中。
  • 不知道。将错误报告添加到您的打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,以查看它是否产生任何结果。还将or die(mysql_error()) 添加到mysql_query()。无法重现问题。
  • 愚蠢的问题,但您的浏览器是否启用了 cookie?此外,通过打印来检查 session_id。将标头重定向更改为用于测试的 url(因为将 session_id 写入屏幕会破坏标头)。

标签: php variables session


【解决方案1】:

我最近遇到了这个问题。会话未通过,您需要在正在加载的页面上调用 session_start 以引用会话变量。

【讨论】:

  • 他们正在这样做。看看他们问题的底部。
【解决方案2】:

仅供其他人查看,添加

session_regenerate_id(TRUE);

下面

session_start();

似乎对我有用!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 2014-04-16
    • 2013-11-10
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多