同时进行AJAX请求和PHP会话

同时进行AJAX请求和PHP会话,php,ajax,session,Php,Ajax,Session,我遇到了一个特殊的问题,即同时发出修改会话中存储的PHP对象的AJAX请求。我在比赛中遇到了一些问题,但我不明白为什么会这样。。。一次只能有一个AJAX调用打开会话,所以如果他们在修改时保持会话打开,那么每个调用不应该都能看到其他调用所做的更改吗?下面是流程的简化版本(a和B是两组参数): 1) 进行了一个AJAX调用,该调用运行Initiate(A)。此呼叫将打开会话。它通过向数组中添加“A-Running”来更新PHP对象。 2) 对运行(A)进行AJAX调用。它等待Initiate(A)关

我遇到了一个特殊的问题,即同时发出修改会话中存储的PHP对象的AJAX请求。我在比赛中遇到了一些问题,但我不明白为什么会这样。。。一次只能有一个AJAX调用打开会话,所以如果他们在修改时保持会话打开,那么每个调用不应该都能看到其他调用所做的更改吗?下面是流程的简化版本(a和B是两组参数):

1) 进行了一个AJAX调用,该调用运行Initiate(A)。此呼叫将打开会话。它通过向数组中添加“A-Running”来更新PHP对象。
2) 对运行(A)进行AJAX调用。它等待Initiate(A)关闭会话,然后运行。它短暂地打开会话,但显式地关闭会话,并且不修改对象。运行(A)最多需要60秒。
3) 另一个AJAX调用运行Initiate(B)。这将打开会话,并通过向数组中添加“B-Running”来修改对象。
4) 另一个AJAX调用用于运行(B)。它会短暂打开会话,但会显式关闭会话

到目前为止,一切都很好。运行(A)和运行(B)都在执行。“A-Running”和“B-Running”都在对象的数组中,存储在会话中,该会话在两个请求中都没有打开。这里是事情变得有趣的地方:

5) Run(A)首先完成执行,并发出一个AJAX调用,该调用运行Show(A)。这将打开会话,检索对象,并将“A-Running”更改为“A-Complete”。有趣的是,“Running-B”根本不存在。
6) 当Run(B)完成时,会发出一个AJAX调用,执行Show(B)。这将打开会话并检索对象。它将“B-运行”更改为“B-完成”。然而,数组中的第一个元素是“A-Running”

如果会话已关闭并保存,当Show(A)打开它时,为什么它看不到Initiate(B)所做的更改?当Initiate(B)可以清楚地看到Initiate(A)所做的更改,但Show(B)无法看到Show(A)所做的更改时


如果运行(B)在运行(A)之前完成,则会出现类似的问题。

它似乎与eyeOS框架有关。看起来,由于我在运行函数开始时执行了会话_write _close(),因此我必须在运行函数结束时执行会话_start()。。。否则eyeOS就不能正常清理了


我已经断断续续地做了三天了。这个故事的寓意是:不要使用eyeOS来开发

您是否使用自己的会话处理程序,而不是使用磁盘上文件的默认会话处理程序?我们使用的是外部框架(eyeOS),但在其代码中没有看到任何对会话\u set\u save\u处理程序的调用。没有其他方法可以使用自定义会话处理程序,是吗?我在服务器上也看到了一个/tmp/sess(我的会话id)。这听起来像是一个自定义会话处理程序和数据库锁定的例子,但现在我不太确定。