巧用session_write_close()解决session死锁的问题 作者:七棵菜 日期:2022-11-30 栏目:计算机分类:1 人气:491 session阻塞的原因 > 当开启session_start以后,这个session会一直开启,并且被一个用户使用。其他用户开启session的话要等待第一个session用户关闭以后才可以开启session,这样就造成了session阻塞。而session_write_close()可以解决这个session阻塞机制。 解决session阻塞问题的办法:在session操作完成后调用session_write_close()即可避免此问题。 下面是session阻塞案例: - 案例一: 使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。 结合了PHP的Session机制,找到了阻塞的原因。由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当 session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用 session_start的时候就被阻塞了。 > 绝大多数情况发生在一个页面有多个ajax调用的时候,最常见的情景就是登陆页面的验证码 最简解决方法: 查了PHP的手册,发现一个session_write_close函数,作用是Write session data and end session,也就是写session的数据,同时关闭这个session。因此,我们可以在用完session之后,调用这个函数关闭session 文件即可解除锁定。一般,session是用来记录用户身份信息的,以便PHP进行身份认证,因此完全可以将session的读写放在页面刚开始执行的时候,在执行完以后,马上调用session_write_close函数即可。 在页面回话结束之后,php会自动调用session_write_close,但是当一个页面有多个ajax请求的时候,不可避免的在php没有自动调用session_write_close时,会开启另一个session,因此可以在ajax页面中开启session之前,手动调用session_write_close,将其他session关闭。 ### 鸣谢 - [陶士涵的菜地](https://www.cnblogs.com/taoshihan/p/13041963.html) 标签: php session 上一篇:如何使用mvn命令导入依赖 下一篇:thinkphp6.0消息队列配置database驱动 随便看看 2024-02-19 PHP7 运算符“??” 和“?:”的区别 2022-11-30 Linux 后台运行命令 2022-11-25 关于我们 2022-11-30 centos一键系统安装lnmp集成环境 2022-11-30 linux 生成 ssh 公钥 留言