As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center用于指导。
6年前关闭。
在编写自定义会话处理程序时,应遵循哪些最佳实践?我已经完成了大部分现有PHP框架,其中大多数在处理会话ID更新时并发性和多个Ajax请求都有问题。默认的PHP会话使用文件锁来管理这一点,但是如果我使用mysql来存储会话,则似乎没有合适的方法来执行此操作。解决这个问题的最好办法是什么?感谢任何帮助。
6年前关闭。
在编写自定义会话处理程序时,应遵循哪些最佳实践?我已经完成了大部分现有PHP框架,其中大多数在处理会话ID更新时并发性和多个Ajax请求都有问题。默认的PHP会话使用文件锁来管理这一点,但是如果我使用mysql来存储会话,则似乎没有合适的方法来执行此操作。解决这个问题的最好办法是什么?感谢任何帮助。
最佳答案
如果不锁定会话文件/另一个存储行,则可能会丢失数据。
简单的场景(假设您已完全解除锁定):
初始状态:有一个页面同时运行两个ajax请求,每个请求都向会话添加另一个键:
请求发送
请求B已发送
脚本A读取会话到内存,它是空的
脚本B将会话读取到内存中,它是空的
脚本A将密钥A添加到会话中。现在它包含一个键(在内存中)
脚本B将键B添加到会话中。现在它包含一个B键(在内存中)
脚本A保存数据
脚本B保存数据
结果:钥匙丢失
所以-如果你想保证会话中的数据是一致的-你需要一些同步机制。例如,可能是悲观锁,但仍然不能完全避免锁。