PHP session阻塞页面的问题

发现问题的起因是在做一个发布系统的时候,在点击发布按钮后ajax开始执行发布操作,此请求的程序是一个开启session的程序,其中包括上线的发布动作,由于上线操作时间较长并且分好几步所以请求的时间很长导致页面阻塞住,同时,在发布请求发出的同时发出一个类似setinterval的循环ajax请求,主要作用为请求后端询问发布当前进行的步骤,通过返回结果来展现页面上的进度条。事情看起来很完美,在执行后发生了个奇怪的现象,就是查询后台发布步骤的循环ajax请求被pending住了,一直到发布请求结束后才返回数值,这样就看不了进度条效果了。但由于ajax设置的是异步请求,所以并不会阻塞住其他的请求,所以判断问题出在后端。
随后开始检查后端代码,找死循环等等。。。但是一无所获,最后在某论坛上看到一个人回答了php session的问题,大致意思就是在一个开启了php session的页面中,session会产生一个锁锁住文件,
如果这时又有一个请求请求的页面也需要访问session,这时候因为前一个还在执行,session文件还在锁住的状态,所以后一个无法取到session,所以也一起阻塞在那里,至此问题已经找到:session_start使用后没有关闭(session_write_close)。

总结一下基本就有两个解决方案(欢迎补充)
1.放弃session存储,用缓存(类似kvstore)来做存储。
2.在使用session的时候养成良好习惯,进行session操作后关闭session

以此博客作为记录,大家以后不要再犯这个错误了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值