【发布时间】:2013-04-13 11:36:34
【问题描述】:
在 Firefox 中,会话变量在重定向后被保存并可检索,但在 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" ] );
}
为什么这在 chrome 中不起作用?
编辑:我想我找到了答案,但它没有意义。
如果我删除unset( $_SESSION[ "test" ] ) 行,那么它会在重定向后保存会话!但为什么会出现这种情况?会话应该是服务器端的。我在“回声”声明之后取消了它!仅仅因为我在 after 之后取消设置变量,它怎么不会回显该值?!
有人知道怎么回事吗?
【问题讨论】:
-
尝试删除
header行,然后让页面消失。您应该会看到一个空白页面,但您可能会看到一条错误消息。如果是这种情况,错误说明了什么? -
@Kolink 感谢您的回复。当我发现问题时,请查看我的编辑,但这没有意义。导致它无法保存的是
unset( $_SESSION[ "test" ]行!但是我在调用 echo 之后调用它! -
可能是 Chrome 记住了 301,因此在第一次之后从未真正运行设置变量的代码。尝试删除301并清除所有浏览器数据,之后是否有效?
-
@Jon 刚刚尝试过,但没有解决。 301不是问题。出于某种原因,“未设置”是问题所在。但我不知道为什么。
-
@DonRhummy:如果没有实际的可运行代码,很难调试它,但我重复一遍:
unset不是问题,select isn't broken。
标签: php google-chrome session redirect