即使应用程序处于活动状态并且人们正在处理它,会话也会结束

Session ends even if application is alive and people are working on it

我在处理的应用程序中遇到 "weird" 问题,到目前为止我找不到解决方法。该应用程序使用 Symfony2.6.x 并依赖于多个 Ajax 调用。所有时间请求都是通过 Ajax 提出的。所以,当我登录应用程序(使用 FOSUserBundle)时,Symfony 会自动启动一个新会话,对吗?好的,从那一刻到 config.yml 定义的时间(见下面的配置),应用程序仍在会话生命周期内工作,但在某些时候我被重定向到登录页面并且会话关闭,即使我正在积极工作应用程序。我最好的方法是在 Symfony 或 PHP 中的会话生命周期中不考虑 AJAX 调用,我是对的?

这个问题我最好的办法和解决方法,不知道对不对,也没试过,SO这里想听听大家的意见,就是重新生成session的ID(通过调用migrate() 在当前活动会话上)每次调用 AJAX 这样会话就会保持活动状态,这种方法是否正确?有什么建议吗?

这是我在 config.yml 的会话部分的配置:

config.yml

framework:
    session:
        # session will expire after 10 minutes of inactivity 
        handler_id:  ~
        cookie_lifetime: 2400 
        gc_maxlifetime: 600 # session will expire after 10 minutes of inactivity
        gc_probability: 0
        gc_divisor: 100

注意: and this other 我基本上谈到了同样的问题,但我仍然没有解决这个问题,它正在扼杀我的应用程序和我试图找到解决方案的头脑。

问题:
- 你远程工作吗?如果是这样,您的更改是立即自动保存在服务器上,还是需要手动保存才能运行?
- 你有没有计算你的真实会话的长度(从登录到被切断)?时间长短一样吗?
Guestimate:
如果没有上述内容,我认为您的问题出在会话到期设置的设置上,并且在线路上(在您和服务器之间)某处可能会触发会话重置的事件。 [您是否尝试过打开两个 windows?您知道,登录然后在另一个 window 工作,但保持 post 登录一个打开...]
如果是因为会话设置较短,请尝试以下操作:
php_value session.cookie_lifetime 0
php_value session.gc_maxlifetime 60000
这为您提供了充足的会话时间,或者直到您关闭 browser/cut 连接...