session_regenerate_id()的问题

时间:2016-07-26 12:33:48

标签: php session-variables

我正在使用Facebook的PHP SDK验证用户发表评论,并且效果很好。验证后,我将用户信息存储在会话变量中,但首先调用session_regenerate_id()然后重新加载页面。当页面重新加载时,旧会话数据仍然可用,包括Facebook SDK状态变量,但是,我添加的会话变量不可用。以下是代码片段:

session_regenerate_id();
$_SESSION[...] = ...;

header('Location: ...');
die();

如果我拿出session_regenerate_id()那么一切都很完美。我有什么想法吗?

修改

如果我在每个页面加载时都记录session_id(),我会看到session_regenerate_id()生成一个新的ID,并且会话包含我期望的所有内容。但是,当页面重新加载时,会话ID是先前的会话ID而不是新的会话ID,因此我无法访问新的会话变量。为什么会这样?

1 个答案:

答案 0 :(得分:0)

经过大量记录和扫描发送和接收的标头后,我确定在创建初始会话时,用于cookie的域名是:.domain.com(没有www)。但是,session_regenerate_id()正在将Cookie的域设置为:www.domain.com。当浏览器确定要发送哪个时,它总是发送原始的,因此使用的会话始终是旧的。一旦我手动删除了该cookie,一切正常。

为了确保不再发生这种事情,我在开始会话之前添加了以下内容:

session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME'], true, true);

奇怪的是,.htaccess文件强制执行www.domain.com以保持一致性,因此我不确定为什么初始cookie的域设置方式如此。

相关问题