我在内存缓存中存储 session 时遇到错误。
如果我登录并尝试同时打开大约 25 个不同的页面(不同的选项卡),则会重现该错误。有时我的用户会被注销。有趣的是, session 被保留,但安全上下文被删除。更有趣的是,这个安全上下文被恢复(可能与其他请求一起)。最有趣的是,如果我设置默认文件系统 session 存储 - 一切都会按预期工作。
session 存储在 Amazon Elasticache 上。
如果我在这些请求期间检查我在 Amazon 上的用户 session - 会发生如下情况:
- 请求 1 - 我的 session 具有
sf2_
属性 key 和_security_main
key - 请求 2 - 我的 session 具有
sf2_
属性 key 和_security_main
key - 请求 3 - 我的 session 只有
sf2_
key - 请求 4 - 我的 session 具有
sf2_
属性 key 和_security_main
key 再次
我认为这与并发有关。
我尝试过很多不同的事情,但目前我没有想法。非常感谢任何提示!
技术信息
- Symfony 版本 2.1.0-DEV
- security.yml
如果您需要更多详细信息,请告诉我。
最佳答案
该问题是由于 php 脚本执行时间和 memcache session 锁定配置的时间不同引起的。我有 60 秒的时间用于 php,15 秒的时间用于 memcache.session_lock
那么,幕后发生了什么:
- 脚本 A 启动,锁定 session ,最多需要 60 秒
- 脚本 B 启动,等待 session 解锁
- 脚本 A 执行 15 秒后,memcache 会解锁 session 。
- 脚本 B 侵入流程并“破坏” session
所以我增加了 memcache.session_lock
时间来匹配 php 执行时间 - 然后问题就消失了。
关于php - Symfony2 - 在内存缓存中存储 session 的错误(安全上下文变空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17739188/