【问题标题】:Extending the life of the CakePHP Session Cookie延长 CakePHP 会话 Cookie 的寿命
【发布时间】:2012-06-03 09:10:44
【问题描述】:

在我的 Cake 2 应用程序中,我在 APP/Config/core.php 中有以下代码:

Configure::write('Session', array(
    'defaults' => 'database',
            'cookie' => 'mycookie',
            'timeout' => 4320 //3 days
));

这主要按预期工作。会话存储在数据库中,cookie命名正确,3天后cookie被删除。

上面的例子是从http://book.cakephp.org/2.0/en/development/sessions.html#built-in-session-handlers-configuration得到的

不幸的是,这并不是我想要的。我希望 cookie 在 3 天后被删除,但我希望它是在用户最后一次在网站上处于活动状态后 3 天。换句话说:

1) 用户周一访问网站,cookie 设置为周三到期。不过,他周二回来,所以现在 cookie 将在周四到期。

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

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

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    由于 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');
      }
    }
    

    【讨论】:

    • 这似乎是确保用户在 3 天未登录后返回时退出登录的好方法,但当 cookie 在 3 天后过期时不会让他们保持登录状态的活动。我是否假设这样做的唯一方法是将 cookie 设置为在未来某个可笑的遥远点过期,然后使用您的方法确保它们必须在 3 天不活动后重新进行身份验证?
    • 我想我误解了这个问题(我以为您想在 3 天后将它们超时,而不管活动如何)。如果您将会话超时设置为 3 天,PHP 应该在每次用户处于活动状态时更新到期时间。因此,如果没有我的建议,它应该按您希望的方式工作。如果它没有更新,那就是另一个问题了。
    • 好的,无论如何感谢您的帮助。我对答案投了反对票,以便其他看到这个的人意识到我的具体问题的答案还没有发布。不过,我认为您的答案应该保留,因为它确实包含对希望解决相关问题的其他人有用的信息。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2017-07-15
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多