Symfony2 - 在memcache中存储会话的错误(安全上下文变空)

时间:2013-07-19 06:10:33

标签: php session symfony memcached

我在memcache中存储会话时遇到错误。

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

会话存储在Amazon Elasticache上。

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

  • 请求1 - 我的会话具有sf2_属性键和_security_main
  • 请求2 - 我的会话具有sf2_属性键和_security_main
  • 请求3 - 我的会话只有sf2_密钥
  • 请求4 - 我的会话有sf2_个属性键和_security_main刚刚

我认为它与并发性有关。

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


技术信息

如果您需要更多详细信息,请与我们联系。

2 个答案:

答案 0 :(得分:2)

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

所以,幕后发生了什么:

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

所以我增加memcache.session_lock时间来匹配php执行时间 - 问题已经消失。

答案 1 :(得分:0)

Symfony 2.1终止维护。这意味着不再有任何错误修复,只有安全修复,直到2013年11月结束。

您应该更新到Symfony 2.3 LTS,其维护期为36个月。也许这已经修好了。如果没有,请提出issue in the project

顺便说一下。您可以尝试memcached处理程序而不是memcache。在#8407

中提到