问题
使用session过程中,在开启session后,同一浏览器执行同一程序,不同页面会被锁,不同浏览器不会出现这种情况
原因
由于PHP的Session信息是写入文件的,1个客户端占有1个session文件,因此,当 session_start 被调用的时候,该文件是被锁住的,而且是以读写模式锁住的,所以第2次调用 session_start 的时候就被阻塞了
解决
使用 session_write_close 函数(Write session data and end session),也就是写session的数据,同时关闭这个session,因此在用完session之后,调用这个函数关闭 session 文件即可解除锁定
Demo
创建 test1.php 和 test2.php 文件1
2
3
4
5
6
7
8// test1.php
date_default_timezone_set('PRC');
session_start();
$_SESSION['test1'] = date('H:i:s');
//session_write_close();
sleep(5);
echo $_SESSION['test1'];
1 | // test2.php |
先访问 test1.php 再访问 test2.php, test2.php 必须等 test1.php 执行完毕后才会执行,这时将 test1.php 的 session_write_close() 取消注释,再测试一遍,这时2个脚本就可以同时执行了