繁体   English   中英

regenerate_session_id销毁会话信息

[英]regenerate_session_id destroying session information

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

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

我发现,$ _ SESSION在后续请求中为空。

我尝试复制数据:

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

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

我有一个开发环境,我最近刚刚运行了一个较新版本的PHP(5.5),并且该代码可以正常运行。 我不知道其他任何区别。

我想念什么? 提前致谢。

session_start();

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

session_regenerate_id();

echo $_SESSION['name'];

输出'mike'

我在服务器上做了一点测试,看来工作正常。

<?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?

经过一整晚的休息后,我发现您可能遇到了一些标题问题。 会话仅在设置它们的同一个域内有效,因此,例如,如果您在www.example.com设置了会话变量,则使用标题重定向到header("location:example.com"); ,则您的会话变量将为空白,因为未为该域设置,而是为www.example.com设置。 我将检查您的代码,看看是否是问题所在,正如您所说,它在沙盒中运行正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM