由ajax调用的PHP脚本无法执行start_session()

时间:2014-06-27 14:44:33

标签: php ajax

我有一个脚本A,它在顶部调用session_start()并创建一些会话变量。 然后脚本进行调用脚本B的ajax调用:

$("#galleryContent").load("B.php", {op : 'get_thumbs' 
                                   },
                                   function() {
                                    $('.galleryThumb').draggable(thumb_dragOps);  
                                   }
                         s);  

B需要访问会话变量脚本A设置,因此它执行session_start()以尝试获取变量。但是B的session_start()会挂起。

我在这里做错了吗?

由于

1 个答案:

答案 0 :(得分:1)

这是由于锁定; PHP会在写入会话文件时将其锁定。要解决此问题,请在使用session_write_close()修改会话变量后关闭会话文件。

过去我遇到过这个问题,锁定是问题所在。一定要明确告诉PHP你已经使用session_write_close()修改了会话,你应该没问题。

来自documentation

  

会话数据通常在脚本终止后存储而无需调用session_write_close(),但由于会话数据被锁定以防止并发写入,因此任何时候只有一个脚本可以在会话上运行。将框架集与会话一起使用时,由于此锁定,您将体验到逐个加载的框架。只要对会话变量进行了所有更改,就可以通过结束会话来减少加载所有帧所需的时间。

注意:您还可以设置custom session handler并通过将会话信息存储在数据库中来完全避免此文件锁定问题。在任何规模上,这都是必要的。