最近在做项目时,需要一个邮箱网站性能方面的难题。自己写了一个接口,然后对接口进行测试,通过浏览器访问该接口地址一直处于等待响应的状态,访问速度非常慢。最后调试发现是session_start()导致的。
PHP默认的会话处理器是session.save_handler = files(即文件)。如果同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能。因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁。这样,同时多个请求就会引起阻塞。解决方案如下:
(1)修改会话变量后,立即使用session_write_close()来保存会话数据并释放文件锁。
session_start();
$_SESSION[\'test\'] = \'test\';
session_write_close();
//do something
(2)利用session_set_save_handler()函数是实现自定义会话处理。
function open($savePath, $sessionName)
{
echo \'open is called\';
return true;
}
/* http://www.manongjc.com/article/1269.html */
function close()
{
echo \'close is called\';
return true;
}
function read($sessionId)
{
echo \'read is called\';
return \'\';
}
function write($sessionId, $data)
{
echo \'write is called\';
return true;
}
function destroy($sessionId)
{
echo \'destroy is called\';
return true;
}
function gc($lifetime)
{
echo \'gc is called\';
return true;
}
session_set_save_handler(\"open\", \"close\", \"read\", \"write\", \"destroy\", \"gc\");
register_shutdown_function ( \'session_write_close\' );
session_start();
$_SESSION[\'foo\'] = \"bar\";
当然,在 php 5.4.0之后,你可以通过实现 SessionHandlerInterface 接口或继承 SessionHandler 类来使用。
继续阅读与本文标签相同的文章
上一篇 :
智能化会比互联网化进展更快
下一篇 :
当面孔成为大数据养料,你的脸还好吗?
-
这间屋子没有电话
2026-05-14栏目: 教程
-
曾经扬言“我要摧毁人类”的机器人,在拥有公民身份后,近况如何?
2026-05-14栏目: 教程
-
中国客车“抢眼”世界客车博览会
2026-05-14栏目: 教程
-
充分利用系统磁盘空间,Windows 7操作系统如何创建压缩文件夹
2026-05-14栏目: 教程
-
iPhone11系列性能测试:碾压华为麒麟990,性能超越它两倍!
2026-05-14栏目: 教程
