【问题标题】:How to prolong the remember_me cookie on each request in Symfony2?如何延长 Symfony2 中每个请求的 remember_me cookie?
【发布时间】:2012-09-26 15:52:56
【问题描述】:

我使用标准的remember_me symfony 功能,但它每隔一段时间就会过期,在配置中设置。 例如。我将lifetime 设置为 1800。不管我做什么,它会在上次登录后 0.5 小时后将我注销。我希望它仅在 0.5 小时不活动后将我注销。

每个请求都应该延长记住我的 cookie。

这可以通过配置来完成,还是我应该处理内核事件并手动破解?

【问题讨论】:

    标签: symfony remember-me


    【解决方案1】:

    确实有一种方法可以仅通过配置设置来实现,但仅限于 Symfony 2.1。可行的方法是使用 PHP 中集成的会话垃圾收集。在这里你可以如何实现它。

    在您的 config.yml 文件中,设置以下变量:

    framework:
      session:
        cookie_lifetime: 86400 # One day, cookie lifetime
        gc_maxlifetime: 1800 # 30 minutes, session lifetime
        gc_probability: 5
        gc_divisor: 100
    

    使用此配置,发送到浏览器的 cookie 有效期为一整天。但是,会议将持续 30 分钟。由于每次请求都会保存会话,因此每次请求后都会“重新启动”生命周期。因此,每次请求都会延长会话。

    然后是垃圾收集部分。这可能是“有问题的”,具体取决于您想要的精确程度。属性gc_probabilitygc_divisor 控制垃圾收集运行的频率。这些数字意味着每次会话初始化时 GC 将以 5%(5/100,gc_probability/gc_divisor)的概率运行。

    这意味着当 GC 运行时,它将删除过期的会话。但是,由于这是一个概率特征,因此您无法完全控制它。在您指定的生命周期之后,某些会话仍然可以访问,因为 GC 尚未运行。

    如果这对您来说是个问题,那么您需要在每个请求上设置一个监听器并检查会话是否仍然有效。如果您想在会话过期时向用户显示消息,您也需要这样做,因为还没有会话过期事件。

    别忘了,我的回答只在 Symfony 2.1 中有效。在 2.0 上,您还需要一个请求侦听器来验证会话生命周期值。

    这里有一些关于会话空闲时间的链接:

    1. PR 上介绍保持活动会话的链接:PR-2171
    2. 会话文档:here
    3. 会话 gc 上的 PHP 站点:here

    希望对你有所帮助。

    问候, 马特

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 2021-02-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多