PHP编程中的Session阻塞问题与解决方法分析


Posted in PHP onAugust 07, 2017

本文实例讲述了PHP编程中的Session阻塞问题与解决方法。分享给大家供大家参考,具体如下:

使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况。

疑问:是不是session_start导致了阻塞?

于是,我写了几个页面测试了一下,发现是session导致了阻塞,而其他两种情况不会造成阻塞。

查了下PHP的Bug列表,发现有人提出了这个问题:

Description:
------------
Calling session_start() appears to wait until other scripts have exited

that are using the same session. My guess is the 1st request locks the
session file for exclusive use, and the second request blocks until it
can open it.

PHP官方的回复是:

Thank you for taking the time to write to us, but this is not a bug.This is expected, the session file is locked to avoid corruption.

结合了PHP的Session机制,找到了阻塞的原因。由于PHP的Session信息是写入文件的,1个客户端占有1个session文件。因此,当 session_start被调用的时候,该文件是被锁住的,而且是以读写模式锁住的(因为程序中可能要修改session的值),这样,第2次调用 session_start的时候就被阻塞了。

最简解决方法:

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP中创建并处理图象
Oct 09 PHP
PHP脚本的10个技巧(2)
Oct 09 PHP
php UTF8 文件的签名问题
Oct 30 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
php define的第二个参数使用方法
Nov 04 PHP
php的一个简单加密解密代码
Jan 14 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
PHP.vs.JAVA
Apr 29 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
php解压缩zip和rar压缩包文件的方法
Jul 10 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 #PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 #PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 #PHP
php封装的mongodb操作类代码
Aug 06 #PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 #PHP
php mysql数据库操作类(实例讲解)
Aug 06 #PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 #PHP
You might like
在PHP的图形函数中显示汉字
2006/10/09 PHP
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
php在线代理转向代码
2012/05/05 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
详解mpvue中小程序自定义导航组件开发指南
2019/02/11 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
[02:02:38]VG vs Mineski Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
JSF界面控制层技术
2013/06/17 面试题
批评与自我批评发言稿
2014/10/15 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
英语教学课后反思
2016/02/15 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书