75142913在线留言
什么是PHP session阻塞,怎么避免出现session阻塞_PHP技术_网络人

什么是PHP session阻塞,怎么避免出现session阻塞

Kwok 发表于:2019-12-19 14:12:00 点击:5 评论: 0

同一个用户,同时打开多个PHP脚本调用session_start()时,会等待其他PHP脚本正在执行写入session的退出才能写入。正在使用同一会话时会锁定SESSION文件并独占使用的SESSION文件,第二个请求阻塞直到它完成写入并关闭才能进行,我们称为session阻塞

PHP官方回复与我的想法差不多:

这不是一个错误。这是预期的,会话文件被锁定以避免损坏。

原理其实比较简单,PHP.ini默认情况下是将$_SESSION序列化后以文件的方式保存到硬盘中的,如果没有使用锁定,多个PHP脚本同时写入文件,就会出现错误的如果。

比如程序1要写入:

我是张三

程序2要写入:

我是李四

如果2个同时写入,将会出现:

我我是是张李三四

这样的情况,当然,这样写是方便理解,真实情况肯定比这个复杂,文件由于二进制码损坏直接是乱码的情况。所以PHP官方使用了排除阻塞的方式,按请求的先后顺序避免以上情况的发生。

了解了阻塞的原理,我们再来谈谈怎么解决这个问题(虽然发生的机率极低,同用户同一个浏览器同时打开多个脚本才有可能出现,根本硬盘的写入速度,时间极短,短到以毫秒计)。

官方提供了一个解决函数:

session_write_close();

写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时 候,在执行完以后,马上调用session_write_close函数即可。

如果服务器环境支持Redis,可以将session写入到内存里,提升大大提升网站的性能并减少服务器的IO。参考:http://www.neter8.com/php/56.html

除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:http://www.neter8.com/php/58.html
标签:session阻塞
0
感谢打赏!

《什么是PHP session阻塞,怎么避免出现session阻塞》的网友评论(0)

本站推荐阅读

热门点击文章