regenerate_session_id销毁会话信息

时间:2013-11-17 02:18:36

标签: php session

我有一个需要在特定时间创建新会话ID的应用程序。现在,这导致用户注销,因为$ _SESSION最终为空。

我的理解是,regenerate_session_id()应该保留会话信息,只需更改会话ID(意味着$ _SESSION ['someVar']将在后续请求中可用。

我发现$ _SESSION在后续请求中为空。

我尝试过复制数据:

$session = $_SESSION;
session_regenerate_id();
$_SESSION = $session;

但这没有帮助。如果我注释掉session_regenerate_id();后续页面正确加载(填充$ _SESSION数组并且用户保持登录状态。)

我有一个开发环境,我刚刚设置运行较新版本的PHP(5.5),这段代码正如我所期望的那样运行。我不知道有任何其他差异。

我错过了什么?提前致谢。

2 个答案:

答案 0 :(得分:0)

session_start();

$_SESSION['name'] = "mike";

session_regenerate_id();

echo $_SESSION['name'];

输出'mike'

答案 1 :(得分:0)

我在服务器上进行了一些测试,似乎工作正常。

<?php
session_start();
$old = session_id();
$_SESSION['name'] = "mike";
session_regenerate_id();
$new = session_id();
echo $_SESSION['name']."<br/>\n";
echo $old ."<br/>". $new
?>

以下是输出示例:

mike
d9oog3vo55936m3088o25qqe27
m6qq99pp1c80mit8e66ho3hfn3

正如您所看到的,它正在改变会话ID并保持会话变量到位,正如它应该的那样。也许您的托管服务提供商在php.ini中有一些时髦的设置?你可能想看一下。

或者,这有点麻烦,难道你不能创建一个带有密钥的cookie,它会在它们注销后立即重新登录,然后删除cookie吗? < / p>

经过一夜好眠,我发现你可能有一些标题问题。会话仅在其设置的同一域中有效,因此,例如,如果您在www.example.com中设置会话变量,然后使用标头重定向到header("location:example.com");,则会话变量将为空,如它们未设置为该域,它们设置为www.example.com。我会查看你的代码并查看是否存在问题,正如你所说,它在你的沙盒中工作正常。