标头重定向后PHP $_SESSION为空
Posted
技术标签:
【中文标题】标头重定向后PHP $_SESSION为空【英文标题】:PHP $_SESSION empty after header redirect 【发布时间】:2011-07-01 10:09:01 【问题描述】:我在进行标头重定向时丢失了 $_SESSION 中的数据。当我使用调试器完成此操作时,我可以在 exit() 之前在 $_SESSION 中看到我的所有数据;
Login.php:
...
if($result == 1)
header("Location: /myaccount.php");
session_write_close();
exit();
else
header("Location: /login.php?invalid=yes");
exit();
然后我在下面的 session_start() 条件之后放置一个断点,并且 $_SESSION 完全为空。
myaccount.php:
<?php
if(!isset($_SESSION['user_id'])) session_start();
$docRoot = getenv("DOCUMENT_ROOT");
...
我的会话去哪儿了?
【问题讨论】:
【参考方案1】:确保在myaccount.php
上的 if 语句之前使用函数 session_start();
【讨论】:
这就是问题所在。我在每个页面上都使用该条件,这样我就不会尝试多次调用 session_start() 。会话中总是有一个用户 ID,因此测试工作正常......只要我输入正确。它实际上是“用户名”。愚蠢的错误。有没有办法删除这个毫无价值的帖子? @sing1ejack:不要删除帖子,它可能对面临同样问题的人有用。我很高兴看到你的帖子,但我认为这比忘记 session_start(); 复杂一点。 :D 就我而言,它在标头重定向后也不起作用,但每次我想使用 $_SESSION 变量时我都会调用 session_start(),我在文件中设置一个 ($_SESSION['message'] = 'blahblah' ;),并且当使用 header() 重定向到另一个文件时,$_SESSION 数组为空。我还将会话的保存路径重定向到另一个目录,在该目录中我可以使用文本编辑器看到“blahblah”消息...【参考方案2】:您应该在访问(即读取或写入)$_SESSION
的每个页面上调用 session_start()
,并在访问会话数组之前调用它。因此,请务必在两个页面上都调用session_start()
。
【讨论】:
【参考方案3】:是的,不要删除帖子...我遇到了完全相同的问题,而这个帖子让我不由自主地用手掌狠狠地敲击了额头。它解决了这个问题(用我的代码,不是我的愚蠢)。干杯!
【讨论】:
以上是关于标头重定向后PHP $_SESSION为空的主要内容,如果未能解决你的问题,请参考以下文章