我的Symfony2应用程序显示一个主页面,从那里开始主要使用AJAX请求通过模态向用户显示内容。
我注意到,在用户闲置一段时间(大约15-30分钟)后,会话被破坏,用户退出并需要再次登录。这令人非常沮丧,因为我不能指望用户每次闲置几分钟都会再次登录。
据我所知,这个问题不应该根据我的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
为了完整起见,我目前的环境如下:
php.ini
基于文件)
要点:
我该如何解决这个问题?
答案 0 :(得分:11)
问题:
事实证明,在Debian / Ubuntu系统上,有一个系统cronjob每30分钟运行一次,清除所有" old"会话。这就是问题所在。
cronjob实际上并不知道是什么构成了#34; old"。 cronjob只调用位于/usr/lib/php5/maxlifetime
的PHP-CLI脚本,然后删除超过特定年龄的所有会话文件。由于脚本由PHP-CLI参与,并且独立于Symfony2,因此不知道您在Symfony2配置文件中为gc_maxlifetime
和cookie_lifetime
指定了哪些值。相反,如果只是默认使用session.cookie_lifetime
配置文件中的session.gc_maxlifetime
和/etc/php5/cli/php.ini
值,默认情况下为24分钟。因此,无论您在Symfony2配置文件中指定了什么,如果您闲置太久,您的会话将被删除。
解决方案:
/etc/cron.d/php5
或答案 1 :(得分:1)
我设置记住我设置为默认的cookie,然后是security.yml
security:
firewalls:
main:
form_login:
remember_me: true
remember_me:
key: mycookie
lifetime: 2592000 # 30 days
path: /
domain: ~
always_remember_me: true
答案 2 :(得分:1)
我的第一个答案似乎不适合您的问题。也许这个会有所帮助。
您是否在请求之间清除了Symfony缓存?
<强>的save_path 强>
输入:字符串默认值: %kernel.cache.dir%/ sessions
这确定了要传递给保存处理程序的参数。如果你 选择默认文件处理程序,这是会话所在的路径 文件已创建。有关更多信息,请参阅配置目录 会话文件保存的位置。
您还可以通过将值设置为 null 将此值设置为php.ini的 save_path 。
默认情况下,Symfony将会话存储在缓存目录中,同时清除缓存...
答案 3 :(得分:0)
<强> cookie_lifetime 强>
键入:整数默认值: null
这决定了会话的生命周期 - 以秒为单位。它会用 默认情况下为null,表示来自的session.cookie_lifetime值 将使用php.ini。 将此值设置为0表示cookie为 对浏览器会话的长度有效。
所以,0不是无限会话但浏览器会话...你应该定义一个大的秒数并测试它。
答案 4 :(得分:0)
这会打开文件,显示非常长的crontab代码,默认情况下每隔30分钟清除一次会话。脚本前面有一个#,我所做的就是通过删除#来取消注释两行。所以:
# Look for and purge old sessions every 30 minutes
# 09, 39, * * * * root @[ -x /usr/lib/php5/maxlifetime ] && [ etc
it's a long file.....]
我刚刚删除了Look和09前面的2#。就是这样!