2012-12-28 51 views
2

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

+0

你问你是否可以模拟锁定数据库? –

回答

1

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

简单的场景(假设你已经下降完全锁定):

初始状态:有2 Ajax的请求一个页面上同时运行,其中的每一个增加了另一个关键会议:

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

结果:钥匙丢失

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