在Firefox中,会话变量在重定向后保存并可检索,但在Chrome中重定向后,它表示它不存在。为什么会在Chrome浏览器重定向后不会保存会话变量?
重定向代码:
session_start();
$_SESSION[ "test" ] = "exists";
session_write_close();
header("HTTP/1.1 301 Moved Permanently"); //Removing this 301 line doesn't help
header("Location: http://" . $_SERVER[ "HTTP_HOST" ] . "/");
exit();
检索会话:
session_start();
if (isset($_SESSION[ "test" ]))
{
echo $_SESSION[ "test" ];
unset($_SESSION[ "test" ]);
}
为什么不这项工作铬?
编辑:我想我找到了答案,但它没有任何意义。 如果我删除行unset($_SESSION[ "test" ])
,那么它会在重定向后保存会话!但为什么会发生?会话应该是服务器端的。我在“回声”声明后解除了它!它如何不回应该值,仅仅是因为我在之后忽略了变量?!
有谁知道发生了什么事?
尝试删除'header'行并让页面死掉。您应该看到一个空白页面,但您可能会看到一条错误消息。如果是这种情况,那么错误是什么意思? – 2013-04-20 00:59:12
@Kolink感谢您的回复。请看我的编辑,因为我发现问题,但它没有任何意义。这是'unset($ _SESSION ['test']''这一行导致它不能被保存!但是我在调用echo之后调用它! – 2013-04-20 01:01:59
可能是因为Chrome会记住301,因此从未真正运行设置变量的代码在第一次尝试删除301和清除所有浏览器数据,事后工作吗? – Jon 2013-04-20 01:02:35