CakePHP的会话更新,但是cookie的有效期届满,并不(CakePHP Session upd

2019-06-25 23:53发布

简短的问题:

为什么我的会话cookie的到期时间把浏览器更新的时候,我会的expirty时间是在服务器上更新?

长的问题:

我发布了类似的问题,关于这几个星期前,但我没有当时所有的事实。 我现在有更多的细节和问题的性质发生了变化,所以我张贴它作为一个新的问题。

首先,在CakePHP中2,我已经设置了APP /配置/ 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 ),而这正是它做什么,这意味着下一次我按下刷新,蛋糕生成即使旧的仍然是技术上有效的一个全新的会话ID。

我的问题是基本上是怎么回事呢? 为什么不饼干即可通过浏览器中的新到期日更新?

Answer 1:

你已经发现这个问题确实是出乎意料和结束会议,他们应该活着。

这是CakePHP中如何使用PHP的会话函数的结果。 有一个条目( #3047在CakePHP的错误追踪系统,其中马克的故事(CakePHP的开发者)) 同意本应该是固定的

我可以同意,饼干应该与存储在会话的会话时间进行更新。 然而,这不是PHP的会话内部功能如何处理工作。 似乎有几个不同的方法来解决此问题。

由于这将改变目前的行为(但奇怪的可能),修复被推迟到了2.3版本,虽然。

我认为管理PHP之外Cookie状态将是最合适的解决方案。 我不知道怎样安全的改变,这是对现有应用程序,虽然的。 更改会议的工作方式可以显着变化,并允许用户留logge喧嚣更长的时间可能不是什么所有的开发者都期待。



Answer 2:

这似乎是PHP如何处理会话。 PHP不更新每个请求的cookie(参见: http://php.net/manual/en/function.session-set-cookie-params.php#100672 )。 而不是依靠此cookie到期时间,CakePHP的当前时间与实际会话超时比较Session::_validAgentAndTime()



Answer 3:

这个问题可以通过组合使用两个参数来解决。

Configure::write('Session', array(
    'cookie' => 'CAKEPHP',
    'defaults' => 'php',
    'timeout' => 60,                // 60 minutes: Actual Session Timeout
    'cookieTimeout' => 1440,        // 1440 minutes: 24 hrs: Actual Cookie Timeout
    'autoRegenerate' => true,
    'requestCountdown' => 1,
    'checkAgent' => false,
));
  • autoRegenerate:刷新后,生成会话cookie。 在此之后,会话Cookie进行再生的刷新次数由下一个参数确定。
  • requestCountdown:保留此参数尽可能低的值。 这之后,会话cookie将再生刷新/重载的数量。


文章来源: CakePHP Session updates but cookie expiry doesn't