【问题标题】:Symfony2 - bug with storing sessions in memcache (security context becomes empty)Symfony2 - 在内存缓存中存储会话的错误(安全上下文变为空)
【发布时间】:2013-07-19 06:10:32
【问题描述】:

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

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

会话存储在 Amazon Elasticache 上。

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

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

我认为这与并发性有关。

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


技术信息

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

【问题讨论】:

    标签: php session symfony memcached


    【解决方案1】:

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

    那么,幕后发生了什么:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 感谢您的回复。我想在将项目更新到较新版本之前定义一个错误。不更新没那么容易
      • 我知道,因为 2.3 中的一些强制性更改和 BC 中断,在升级之前有一些事情要做。但这是值得的,如果你已经这样做了,你有很长一段时间不需要升级,因为 2.3 是一个长期支持版本。
      • 顺便说一句。您可以对最新的 2.2 版本进行中间升级,该版本没有 BC 中断和维护期(包括错误修复),直到 2013 年 11 月
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多