在 Apache 中,同一个会话中的并行请求,在服务端其实不都是并行的,这是因为开启了文件类型的 SESSION 的缘故!
可以从 PHP 官方文档中找到说明:
无论是通过调用函数 session_start() 手动开启会话, 还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP 的默认行为)而言, 在会话开始的时候都会给会话数据文件加锁, 直到 PHP 脚本执行完毕或者显式调用 session_write_close() 来保存会话数据。 在此期间,其他脚本不可以访问同一个会话数据文件。
对于大量使用 Ajax 或者并发请求的网站而言,这可能是一个严重的问题。 解决这个问题最简单的做法是如果修改了会话中的变量, 那么应该尽快调用 session_write_close() 来保存会话数据并释放文件锁。 还有一种选择就是使用支持并发操作的会话保存管理器来替代文件会话保存管理器。
本文作者: chenishr
本文标题:《SESSION 的数据存储类型》
本文地址: http://blog.chenishr.com/?p=560
©版权所有,除非注明, 永在路上文章均为原创,转载请以链接形式注明出处和作者细信息。