PHP中的自定义会话处理程序

时间:2012-12-28 11:09:14

标签: php mysql session memcached

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

1 个答案:

答案 0 :(得分:1)

如果您不锁定会话文件/其他存储行,则可能会丢失数据。

简单场景(假设你完全放弃了锁定):

初始状态:有一个页面同时运行2个ajax请求,每个请求都会为会话添加另一个键:

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

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