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环境搭建最新方法
Sep 05 PHP
php 之 没有mysql支持时的替代方案
Oct 09 PHP
使用php来实现网络服务
Sep 15 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
Jun 21 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php自定义函数转换html标签示例
Sep 29 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
PHP实现cookie跨域session共享的方法分析
Aug 23 PHP
php+laravel依赖注入知识点总结
Nov 04 PHP
php png失真的原因及解决办法
Oct 24 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 水平的题目
2007/05/30 PHP
php smarty函数扩展
2010/03/15 PHP
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
PHP分页函数代码(简单实用型)
2010/12/02 PHP
php设计模式 Factory(工厂模式)
2011/06/26 PHP
php后门URL的防范
2013/11/12 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
[原创]php实现子字符串位置相互对调互换的方法
2016/06/02 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
2019/04/27 PHP
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
基于HTML+CSS+JS实现增加删除修改tab导航特效代码
2016/08/05 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
js尾调用优化的实现
2019/05/23 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
深入了解Python数据类型之列表
2016/06/24 Python
用python生成1000个txt文件的方法
2018/10/25 Python
对python当中不在本路径的py文件的引用详解
2018/12/15 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
报纸媒体创意广告词
2014/03/17 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
python实现的web监控系统
2021/04/27 Python
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js