延长CakePHP会话Cookie的使用寿命

时间:2012-05-29 06:33:41

标签: cakephp

在我的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天后遭受同样的删除命运。

1 个答案:

答案 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');
  }
}