2

我有一个在内存缓存中存储会话的错误。

如果我登录并尝试同时打开大约 25 个不同的页面(不同的选项卡),则会重现该错误。有时我的用户会被注销。有趣的是会话被保留,但安全上下文被删除。更有趣的是,这个安全上下文被恢复了(可能有其他请求)。最有趣的是,如果我设置默认文件系统会话存储 - 一切都按预期工作。

会话存储在 Amazon Elasticache 上。

如果我在这些请求期间检查我在亚马逊上的用户会话 - 会发生这样的事情:

  • 请求 1 - 我的会话具有sf2_属性 key 和_security_mainkey
  • 请求 2 - 我的会话具有sf2_属性 key 和_security_mainkey
  • 请求 3 - 我的会话只有sf2_密钥
  • 请求 4 - 我的会话具有sf2_属性 key 和_security_mainkey AGAIN

我相信这与并发性有关。

我尝试了很多不同的东西,但我目前没有想法。非常感谢任何提示!


技术信息

如果您需要更多详细信息,请告诉我。

4

2 回答 2

2

问题是由不同的时间引起的,为 php 脚本执行时间和 memcache session lock 配置。我有 60 秒的 php 和 15 秒的memcache.session_lock

所以,引擎盖下发生了什么:

  • 脚本 A 启动,锁定会话,最多需要 60 秒
  • 脚本 B 启动,等待会话解锁
  • 脚本 A 执行 15 秒后,memcache 解锁会话。
  • 脚本 B 侵入流程并“破坏”会话

所以我增加memcache.session_lock了时间来匹配 php 的执行时间——问题就消失了。

于 2013-07-22T07:58:08.003 回答
0

Symfony 2.1 维护结束。这意味着不再修复错误,只有安全修复,直到 11/2013 生命周期结束。

你应该更新到 Symfony 2.3 LTS,它的维护期为 36 个月。也许这已经解决了。如果没有,请在项目中提出问题。

顺便提一句。您可以尝试memcached处理程序而不是memcache. 在#8407中提到

于 2013-07-19T07:44:38.210 回答