【问题标题】:CakePHP session not auto-renewingCakePHP 会话不会自动更新
【发布时间】:2013-03-04 04:28:00
【问题描述】:

我在 LAMP 服务器上使用 CakePHP v2,如果用户保持活动状态,会话似乎不会自动更新。

换句话说,如果我将会话 cookie 设置为 3 天,那么即使用户一直处于活动状态,用户也会在 3 天后注销。

起初,我认为这可能是正确的行为,但是当我发布关于它的问题时(Extending the life of the CakePHP Session Cookie),我得到的唯一答案倾向于表明我正在经历的行为不是默认行为。

所以,大概我在某个地方做错了什么。这是我在 APP/Config/core.php 中放入的内容:

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

我只希望 cookie 在用户最后一次活动后的 3 天内保持有效。即使用户一直处于活动状态,它目前正在执行的操作也会在 3 天后过期。

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    把它放在 AppController 中的 afterFilter 操作中:

    $this->Session->renew();

    这会更新会话 cookie。

    (如果我出于某种原因进入前端,将其放入 beforeFilter 会导致我的管理会话过期。)

    【讨论】:

      【解决方案2】:

      我认为您需要create a custom session handler 才能达到您的要求。(只需在阅读时更新会话的过期时间。)

      【讨论】:

      • 感谢您的回复。那么我可以从你的回答中假设它绝对不应该这样做吗?上次我问这样的问题时,我被引导相信我的 Cake 安装一定有问题,因为它没有这样做。
      • @Joseph 是的,你的蛋糕没有问题。你只需要自定义你的会话。我相信如果有这样的会话自动更新机制,它会在食谱中提到。
      • 玩了一会儿之后,看起来 Cake 正在 做我想做的事。我现在创建一个新的 3 天会话,“过期”时间戳是“1341546414”。然后,如果我在几秒钟后刷新页面,时间戳会更改为“1341546435”——所以它一定是导致会话过期的其他原因,而不是 Cake。
      • 嗯,是的,这在某种程度上是个好消息,但遗憾的是我还没有找到完整的解决方案。看起来 Cake 正确地更新了会话的到期日期,但浏览器中 cookie 的到期日期并没有得到更新。我在stackoverflow.com/questions/11304390/… 上发布了一个关于此的新问题
      • 我正在开发一个用 v2.6 编写的旧应用程序,并且像@Joseph 一样一直面临这个问题。然后我遇到了this post on Mark's blog,这让事情变得更清楚了。最后,session.cookie_lifetime 在决定会话何时超时方面发挥了重要作用。
      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多