0

在我的 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 设置为周三到期。但是,他周二回来,所以现在 cookie 将在周四到期。

2) 用户周一访问网站,直到周四才再次访问,因此必须生成一个新的 cookie。

起初我认为这可能是添加的问题,Session.autoRegenerate但这似乎没有任何帮助。即使使用此设置,即使用户在整个 3 天期间都在网站上处于活动状态,cookie 似乎仍然会在 3 天后被删除。

4

1 回答 1

0

由于 PHP 会自动更新每个请求的会话 cookie,因此您应该考虑在会话中存储一个单独的超时变量并在您的/Controller/AppController.php文件中处理它。

可能是这样的。

/控制器/用户控制器.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');
  }
}
于 2012-05-29T14:36:17.630 回答