2

编写自定义会话处理程序时要遵循的最佳实践是什么?我已经浏览了大多数现有的 PHP 框架,其中大多数在处理会话 id 更新时似乎都存在并发和多个 ajax 请求的问题。默认的 PHP 会话使用文件锁来管理它,但如果我使用 mysql 来存储会话,似乎没有合适的方法来做到这一点。解决此问题的最佳方法是什么?任何帮助表示赞赏。

4

1 回答 1

1

如果您不锁定会话文件/另一个存储行,您可能会丢失数据。

简单的场景(假设您已经完全放弃了锁定):

初始状态:有一个页面同时运行 2 个 ajax-requests,每个请求都向 session 添加另一个 key:

  1. 请求 A 已发送
  2. 已发送请求 B
  3. 脚本 A 将会话读取到内存中,它是空的
  4. 脚本 B 将会话读取到内存中,它是空的
  5. 脚本 A 将密钥 A 添加到会话中。现在它包含单个 A 键(在内存中)
  6. 脚本 B 将密钥 B 添加到会话中。现在它包含单个 B 键(在内存中)
  7. 脚本 A 持久化数据
  8. 脚本 B 持久化数据

结果:钥匙丢失

所以——如果你想保证会话中的数据是一致的——你需要有一些同步机制。例如,这可能是悲观锁,但仍然不能完全避免锁。

于 2012-12-28T11:12:53.143 回答