0

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

我对这个问题的最佳方法和解决方案,不知道我是否正确,也没有尝试过,我想在这里听听一些人的意见,是重新生成会话的 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

注意: 这篇文章和我的一篇文章基本上都在谈论相同的内容,但我仍然没有解决这个问题,它正在扼杀我的应用程序和我试图找到解决方案的头脑。

4

1 回答 1

2

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

于 2015-04-03T00:05:27.447 回答