编写自定义会话处理程序时要遵循的最佳实践是什么?我已经浏览了大多数现有的 PHP 框架,其中大多数在处理会话 id 更新时似乎都存在并发和多个 ajax 请求的问题。默认的 PHP 会话使用文件锁来管理它,但如果我使用 mysql 来存储会话,似乎没有合适的方法来做到这一点。解决此问题的最佳方法是什么?任何帮助表示赞赏。
问问题
317 次
1 回答
1
如果您不锁定会话文件/另一个存储行,您可能会丢失数据。
简单的场景(假设您已经完全放弃了锁定):
初始状态:有一个页面同时运行 2 个 ajax-requests,每个请求都向 session 添加另一个 key:
- 请求 A 已发送
- 已发送请求 B
- 脚本 A 将会话读取到内存中,它是空的
- 脚本 B 将会话读取到内存中,它是空的
- 脚本 A 将密钥 A 添加到会话中。现在它包含单个 A 键(在内存中)
- 脚本 B 将密钥 B 添加到会话中。现在它包含单个 B 键(在内存中)
- 脚本 A 持久化数据
- 脚本 B 持久化数据
结果:钥匙丢失
所以——如果你想保证会话中的数据是一致的——你需要有一些同步机制。例如,这可能是悲观锁,但仍然不能完全避免锁。
于 2012-12-28T11:12:53.143 回答