【发布时间】:2019-04-22 11:45:51
【问题描述】:
小问题:
为什么当我的会话过期时间在服务器上更新时,我的会话 cookie 的过期时间没有在浏览器中更新?
长问题:
几周前我发布了一个similar question,但我当时并没有所有的事实。我现在有了更多详细信息,并且问题的性质发生了变化,因此我将其作为一个新问题发布。
首先,在 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 与会话ID aqm0gkmjfsuqje019at8cgsrv3 相等,这等于Tue, 03 Jul 2012 04:02:02 GMT,这又是我所期望的。会话的到期时间已更新为距离我上次重新加载页面的 1 分钟。
不幸的是,浏览器中的 cookie 仍然设置为 Expires: Tue 03 Jul 2012 11:01:06 AM ICT(即:04:01:06 GMT),这正是它所做的,这意味着下次我按下刷新时,Cake 会生成一个全新的会话 ID,即使旧的在技术上仍然有效。
我的问题基本上是这里发生了什么?为什么 cookie 没有在浏览器中更新为新的到期日期?
【问题讨论】:
-
如果您在会话日期使用文件系统,文件夹是否可写? app/tmp 应该是可写的。
-
@DavidYell 会话更新正常。未更新的是客户端计算机上的 cookie 到期日期。
-
我可以重现这个并且希望它像你一样以不同的方式工作。提交了一个错误,让我们看看我们是否都弄错了...cakephp.lighthouseapp.com/projects/42648-cakephp/tickets/…
-
@pixelistik 好吧,Mark Story 已经为它设定了一个里程碑,所以我想我们并没有想象到 :-) 感谢您发布这个错误,我无法解释它显然我自己。你为什么不继续发布这个问题的答案来解释这是 CakePHP 的一个缺点,它将在 2.3.0 中解决,我会将其标记为正确答案并奖励我承诺的赏金。
-
@Joseph 好的,我试图把它总结在一个答案中。感谢您发现这一点!
标签: session cakephp cookies session-cookies