CakePHP会话仅在不活动时超时

时间:2013-01-22 23:35:53

标签: cakephp authentication session-timeout

所以这个问题的关键在于如何阻止CakePHP在一段时间不活动后取消认证会话。

因此,如果用户什么都不做,那么我希望CakePHP在30分钟后将其记录下来。但是,如果用户选择在第28分钟不活动时访问某个页面,那么CakePHP应该“重置”它的超时计数器。

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

这是我的配置代码:

Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => '30'
));

有什么想法吗?

5 个答案:

答案 0 :(得分: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
    ));

答案 1 :(得分:8)

虽然timeout值会在每个网页浏览中重置,因此会提供您所需的“非活动超时”,但浏览器的会话Cookie到期日期保持不变。

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

您可以通过$this->Session->renew()重置会话Cookie到期日期。或者设置autoRegenerate = truerequestCountdown = 1,Cake会在每次网页浏览时续订。

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

答案 2 :(得分:4)

我遇到了同样的问题,我使用autoRegenerate选项修复了它:

Configure::write(
    'Session',
    array(
        'defaults' => 'cake',
        'timeout' => '30',
        'autoRegenerate' => true
    )
);

您也可以在$this->Session->renew();课程中使用AppController.php,但上述解决方案是我的最爱。

答案 3 :(得分:2)

Rob Forrest的答案是正确的

Configure::write('Session', array(
        'defaults' => 'php',
        'timeout' => 30, // The session will timeout after 30 minutes of inactivity
        'cookieTimeout' => 1440
));

cookieTimeout应该大于超时 如果您希望会话在不活动时过期,则需要将cookieTimeout设置为非常大的数字(例如60 * 24 * 10(10天))

答案 4 :(得分:0)

    Configure::write('Session', array(
    'defaults' => 'cake',
    'timeout' => 1440, // 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
));

虽然会议在几个小时后结束,但仍然比在几分钟内结束更好。