【发布时间】: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 标记(例如
<?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,以查看它是否产生任何结果。还将or die(mysql_error())添加到mysql_query()。无法重现问题。 -
愚蠢的问题,但您的浏览器是否启用了 cookie?此外,通过打印来检查 session_id。将标头重定向更改为用于测试的 url(因为将 session_id 写入屏幕会破坏标头)。