【问题标题】:Simultaneous AJAX requests causes PHP Session not to be updated properly同时 AJAX 请求导致 PHP Session 无法正确更新
【发布时间】:2013-11-19 15:18:59
【问题描述】:
在我的应用程序中,我有一个每 10 秒运行一次的 AJAX 请求,它告诉服务器用户仍处于连接状态。当用户执行操作时,另一个 AJAX 请求会发送到服务器,该请求会增加 PHP $_SESSION 变量中的一个数字。
当这两个 AJAX 请求同时发生时,我似乎遇到了问题 - $_SESSION 中的数字有时不会增加。我相信这是因为当两个请求同时运行时,有时增加 $_SESSION 变量的请求会在另一个请求之前完成,因此最后一个请求会用旧数据“覆盖”会话。有其他人遇到过这个问题或知道如何解决吗?
【问题讨论】:
标签:
php
ajax
session
extjs
【解决方案1】:
最简单的解决方案是在当前 ajax 请求完成处理后将超时设置为接下来的 10 秒。所以不要使用间隔,在完成时设置超时。
【解决方案2】:
问题是由我的自定义会话处理程序(使用 session_set_save_handler)引起的,该处理程序将会话信息保存到 Oracle 数据库中。它没有任何内容可以阻止两个同时修改会话的脚本。因此,为了阻止这种情况发生,我使用flock() 向会话“读取”处理程序添加了一个基于文件的锁。然后删除文件并在“销毁”处理程序中删除锁定。
这解决了问题,但现在意味着 AJAX 请求似乎必须按顺序运行。