问题描述:
最近在接手公司的一个项目的时候,发现在访问同一个浏览器访问同一个页面的时候,当前一个网页没有完成的时候,之后的页面也没有办法继续进行,只有当第一个页面完成后,第二个页面才会继续;
并且当网络不好时,如果第一个页面访问时间很长,没有完成时,之前已经打开的页面也没有办法操作;
同时在网页前台卡顿的时候,网站的后台就没有办法访问了,造成的前后台的互相阻塞现象;
网站情况
网站是php后台
- php5.6
- pache2.2
- mysql5.5
- 框架thinkphp3.1
- windows (本地)
- linux (远程)
测试
为了页面的执行时间,在程序里加了sleep(10)
后面的页面执行时间都会大于前面的页面的执行时间
后面的页面的完时间都会在前面的页面的完成时间之后
解决
将所有的sql语句进行排查,代码排查也没有发现问题
最后发现在tp框架中默认是开启session的,之后并没有关闭
并且在核心类中的session中只要调用过session()
方法的,就会使用SESSION_START()
之后并没有进行关闭
所有我的解决方法是在自己写的基础控制器中 和调用了session()
方法的地方添加了如下代码
<
session_write_close();
//暂时关闭session文件的写操作