在我的Cake 2应用程序中,我在APP / Config / core.php中有以下代码:
Configure::write('Session', array(
'defaults' => 'database',
'cookie' => 'mycookie',
'timeout' => 4320 //3 days
));
这主要是按预期工作的。会话存储在数据库中,cookie名称正确,cookie在3天后删除。
我从http://book.cakephp.org/2.0/en/development/sessions.html#built-in-session-handlers-configuration
获得了上述示例不幸的是,这不是我想要的。我想在3天后删除cookie,但我希望它是用户最后一次在网站上活动后的3天。换句话说:
1)周一用户访问网站,cookie将于周三到期。然而,他周二回来了,所以现在饼干将在周四到期。
2)用户在星期一访问网站,直到周四才再次访问,因此必须生成新的cookie。
起初我认为这可能是添加Session.autoRegenerate
的问题,但似乎没有任何帮助。即使使用此设置,即使用户在整个3天内在网站上处于活动状态,cookie仍然会在3天后遭受同样的删除命运。
答案 0 :(得分:0)
由于PHP会自动为每个请求更新会话cookie,因此您应该考虑在会话中存储单独的超时变量并在/Controller/AppController.php
文件中处理它。
这样的事可能。
<强> /Controller/UsersController.php 强>
public login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->Session->write('Auth.timeout', strtotime('+3 days'));
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
}
}
<强> /Controller/AppController.php 强>
public function beforeFilter() {
if ($this->Auth->user() && $this->Session->read('Auth.timeout') <= strtotime('now')) {
$this->Auth->logout();
$this->Session->setFlash(__(Your session expired.'), 'default', array(), 'auth');
}
}