CakePHP会话仅在不活动时超时

Kyl*_*ien 24 authentication cakephp session-timeout

所以这个问题的关键在于如何防止CakePHP仅在一段时间不活动后对会话进行解除身份验证.

因此,如果用户什么都不做,那么我希望CakePHP在30分钟后将其注销.但是,如果用户选择在第28分钟不活动时访问页面,那么CakePHP应该"重置"它的超时计数器.

目前还没有发生这种情况.无论活动如何,CakePHP在我的核心配置(app/Config/core.php)中的指定时间后超时.

这是我的配置代码:

Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => '30'
));
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Rob*_*est 27

遇到同样的问题后,我发现这是由Session.cookieTimeout值引起的.虽然php会话仍然有效,但会话cookie上的到期日期不会刷新.

这是我的会话配置

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440, // The session cookie will live for at most 24 hours, this does not effect session timeouts
        'checkAgent' => false,
        'autoRegenerate' => true, // causes the session expiration time to reset on each page load
    ));
Run Code Online (Sandbox Code Playgroud)


Cos*_*sta 8

timeout值重置每个网页浏览并因此提供您需要的"不活动超时"时,浏览器的会话cookie到期日期保持不变.

因此,如果你在第28分钟+第35分钟刷新,那么Cake会话内部(内部= Cake内部)仍然存活,浏览器最终会在第30分钟后删除会话cookie.

您可以通过重置会话cookie到期日期$this->Session->renew().或者设置autoRegenerate = truerequestCountdown = 1蛋糕将在每个网页浏览中更新.

(但是你必须在每个页面视图上重新生成会话都是愚蠢的.因为没有renew(),这个timeout值永远不会发挥作用,因为无论活动多少,cookie都会在固定的日期到期.像一个bug但我还没有找到解决方法.)