gpt4 book ai didi

php - Symfony2 session 未按预期工作/ session 不断超时

转载 作者:可可西里 更新时间:2023-11-01 13:40:02 25 4
gpt4 key购买 nike

我的 Symfony2 应用程序显示一个主页,从那里主要使用 AJAX 请求通过模式向用户显示内容。

我注意到,在用户闲置一段时间后(大约 15-30 分钟) session 被破坏,用户注销并需要重新登录。这非常令人沮丧,因为我不能指望用户每次闲置几分钟后都重新登录。

据我所知,根据我的 config.yml 文件,应该不会发生这个问题,如下所示:

framework:
session:
cookie_lifetime: 0 # Session lifetime in seconds
gc_maxlifetime: 28800 # Seconds after which data will be seen
# as garbage and potentially cleaned up
handler_id: ~ # Current using the default session handler


为了完整起见,我目前的环境如下:

  • 交响乐 2.4.8
  • PHP 5.4
  • session 处理程序:默认(根据 php.ini 基于文件)
  • Ubuntu 服务器 12.10


总结:

  • 应该发生的事情:用户不应注销,即使闲置数小时也是如此
  • 实际情况:用户在闲置 15-30 分钟后被注销


我该如何解决这个问题?

最佳答案

问题:

事实证明,在 Debian/Ubuntu 系统上,有一个系统 cronjob 每 30 分钟运行一次,清除所有“旧” session 。问题就出在这里。

cronjob 实际上并不知道什么是“旧”。 cronjob 只是调用位于 /usr/lib/php5/maxlifetime 的 PHP-CLI 脚本,然后删除所有超过特定时间的 session 文件。由于该脚本由 PHP-CLI 参与,并且独立于 Symfony2,因此它不知道您在 Symfony2 配置文件中为 gc_maxlifetimecookie_lifetime 指定的值。相反,如果只是默认使用 /etc/php5/cli/php.ini 配置中的 session.cookie_lifetimesession.gc_maxlifetime 值文件,默认情况下为 24 分钟。因此,无论您在 Symfony2 配置文件中指定什么,如果您空闲时间过长,您的 session 将被删除。


解决方案:

  • 要么删除位于 /etc/cron.d/php5 的 cronjob 文件,要么,
  • 将您的 session 存储在数据库中,使其无法被 cronjob 访问

关于php - Symfony2 session 未按预期工作/ session 不断超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25402331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com