session锁导致的ajax请求阻塞

          ajax是异步的,而且是支持同时多个请求的,但是一次使用中,发现ajax会发生阻塞,当时我用ajax发送一个发邮件的请求,该请求会执行很长时间,所以我同时发送一个请求去查询已经发送了多少条。但是发现,查询的ajax请求,每次都要等发送的请求回来后,才会去执行,最后多此实验加百度发现了问题

          如果多个ajax请求指向的同一个php文件中用到了session,而且没有释放锁,那么请求就会阻塞

          因为php端执行session_start()的时候,会创建一个session文件并锁定他,当脚本执行完毕的时候,就会释放它,而这个时候其它的请求就会排队等待。

          实验如下:

                  两个ajax请求,从上向下执行  

           

 

 

           服务器端:开启session;test1 等待10秒   test2等待 3秒   

         

 

       最后实际执行结果中,alert()先弹出“test111”,然后再弹出“test222”;,即必须等待第一个ajax执行完了才会执行第二个ajax

       解决方法:

             1.ajax指向的文件不用session,或者指向一个文件用session,另一个文件不用session(注意:就算指向两个文件,同域名下两个文件都用了session也是不行的,除非不同域名)

             2.使用session_write_close();这个方法,等于解除了session锁。

             

 

 

   

 

    

 

posted @ 2020-09-29 10:02  会飞的-余  阅读(292)  评论(0编辑  收藏  举报