标头重定向后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为空的主要内容,如果未能解决你的问题,请参考以下文章

PHP:在标头重定向之前会话未保存

PHP标头重定向不起作用并停留在login.php上

输出消息后如何使用标头重定向到php中的另一个页面?

标头后PHP会话被破坏/丢失

标头重定向后会执行 PHP 脚本吗?

PHP标头未重定向到感谢页面