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

时间:2010-01-10 14:42:21

标签: php session header

我有一个脚本,可以在使用/重定向到header()之前设置一些会话值。

我已经阅读了许多关于$_SESSION变量在header()之后被销毁/丢失的帖子,即使在我实施之后:

// set session here

session_regenerate_id(true);
session_write_close();
header("Location: /");

session_start()设置在正确的位置,是否有人知道我可能遗失的任何内容?

在index.php页面上我有这个:

session_start();
print_r($_SESSION);

// outputs nothing :'(

代码非常复杂,所以不会全部发布,只是片段。

7 个答案:

答案 0 :(得分:11)

由于使用了地理位置标头,我从未见过与会话相关的问题 - 您确定在这两个页面上都在调用session_start吗?


嗯......在你添加上面的session_start位之前,这个答案更有意义,并且提到了你确定使用的是session_start这一事实。 : - )

答案 1 :(得分:5)

标题必须在会话结束前发送

session_regenerate_id(true);

header("Location: /");
// the header must be sent before session close
session_write_close(); // here you could also use exit();

答案 2 :(得分:4)

刚出口;标题后:D我解决了这个

答案 3 :(得分:4)

在Header重定向之后,您需要退出PHP脚本:

header("Location: /");
exit();

答案 4 :(得分:3)

为了解决这个问题,我们得出的结论是服务器配置存在问题,考虑到主机因这类事情而众所周知,这并不奇怪。

答案 5 :(得分:0)

这里没有提到但发生在我身上的一个可能选项是我正在创建另一个会话。当您在 php 中使用 session 时,您一次只能使用一个 session。如果您创建新会话,旧会话将丢失。当您为登录创建会话时更可能发生这种情况,并且您可能想要另一个会话用于其他内容(无论如何都不推荐)。我的案例是一个 flash() 方法,我只在添加/更新/删除帖子后才使用该方法创建会话。并在视图中使用该会话来显示消息然后销毁它。每次我在添加/更新/删除用于登录的另一个会话时创建一个新会话时都会被破坏。这不是经常发生的事情,但有可能发生。

答案 6 :(得分:-4)

您不需要在每个页面中启动session_start()。 cuz,直到你的浏览器关闭,你在php.ini

中指定的整个路径保持相同的会话