简短的问题:
为什么当我的会话的到期时间在服务器上更新时,我的会话 cookie 的到期时间没有在浏览器中更新?
长问题:
几周前我发布了一个类似的问题,但当时我没有所有的事实。我现在有更多细节,问题的性质已经改变,所以我将它作为一个新问题发布。
首先,在 CakePHP 2 中,我为会话设置了 APP/Config/core.php:
Configure::write('Session', array(
'defaults' => 'database',
'cookie' => 'mycookie',
'timeout' => 1 // 1 minute - just for testing
));
因此,我在我的应用程序中加载了一个页面,该页面在数据库中创建了会话。到目前为止一切都很好。
会话被标记为过期,1341288066
等于Tue, 03 Jul 2012 04:01:06 GMT
。同样,这很棒,因为那是从现在开始的 1 分钟。正是我想要的。
如果我查看 Firefox 的 cookie 屏幕,我会发现 cookie 与我预期的一样:
Name: mycookie
Content: aqm0gkmjfsuqje019at8cgsrv3
Host: localhost
Path: /
Send for: Any type of connection
Expires: Tue 03 Jul 2012 11:01:06 AM ICT // (04:01:06 GMT)
现在,在这 1 分钟的窗口内,我回到我的应用程序并刷新页面。然后,我检查会话以查看它是否已更新。它显示1341288122
的会话 idaqm0gkmjfsuqje019at8cgsrv3
等于Tue, 03 Jul 2012 04:02:02 GMT
我所期望的。会话的到期时间已更新为距离我上次重新加载页面的 1 分钟。
不幸的是,浏览器中的 cookie 仍然设置为Expires: Tue 03 Jul 2012 11:01:06 AM ICT
(ie: 04:01:06 GMT
),这正是它所做的,这意味着下次我按下刷新时,Cake 会生成一个全新的会话 ID,即使旧的会话 ID 在技术上仍然有效。
我的问题基本上是这里发生了什么?为什么 cookie 没有在浏览器中更新为新的到期日期?