`

PHP的Session阻塞问题探讨

阅读更多

   最近在开发一个项目,其中有1个PHP页面需要执行较长时间,而且我发现,在执行这个页面的时候,其他的页面都不能访问了,需要等这个页面执行完成以后,其他页面才能打开。

    猜想了一下,有以下几种可能

  1. Web Server(Apache 2.2/Nginx)是不是只能同时处理1个客户端连接?
  2. 是不是打开MySQL数据库的时候被阻塞了?
  3. 是不是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 session阻塞页面分析及优化

    php session阻塞页面分析及优化

    php session登录

    php session登录。附数据表执行SQL,HTML前端代码,PHP代码。

    详解php设置session(过期、失效、有效期)

    在php中设置session有很多方面包有给session设置值或直接设置过期、失效和有效期,下面小编来给大家给各位朋友介绍怎么使用。 我们先来看看在php.ini中session怎么设置,打开 php.ini,查找Session设置部分中以下一...

    PHP的session基础

    关于PHP的session的基本使用 认识session的工作原理 1启动session 2读写session的变量 3删除session变量 4session在用户登录中的应用

    解决springboot实现跨域session共享问题

    解决springboot实现跨域session共享问题,防止sql注入。可以更有效的解决token问题,欢迎下载,有问题可以再评论下方留言,及时解答!!加群:687942640

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

    主要介绍了PHP编程中的Session阻塞问题与解决方法,简单分析了php session阻塞的原理、原因与简单解决方法,需要的朋友可以参考下

    php5的session详解

    php5的session详解.pdf php5 的session详解其一:什么是session? php5 的session 详解之二:有两种方法传递 一个会话ID: php5 的session 详解之三:session安全 php5 的session 详解之四:……

    php-session类.zip

    一个完整的 Session 类,整合了 Session 最基本的属性值,其中,打开,关闭与清理是符合php编程规范的,这也是一个很好的习惯。小小的说明一下,如果网站不是大量使用 Session 类,基本上就没必要使用 SESSION 类了...

    php_session_decoder, 在Go中,编写了PHP会话编码器/解码器.zip

    php_session_decoder, 在Go中,编写了PHP会话编码器/解码器 php_session_decoderPHP会话编解码器/解码器 安装安装:安装推荐的方法是使用 gonuts.io:nut获取 yvasiyarov/php_session_decoder详细信息,请转到 http:/

    PHP与Session

    PHP与Session实现购物车功能,PHP表单验证,js DOM操作

    微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...

    php写的session购物车

    用php写的简单的session购物车,仅供初学者参考,高手莫喷

    PHP中Session引起的脚本阻塞问题解决办法

    解决session阻塞问题的办法:在session操作完成后调用session_write_close()即可避免此问题; 案例一: 使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁。不同浏览器不会出现这种情况...

    PHP 一个SESSION 购物车类

    用PHP写的购物车类,实现了 放入商品 修改数量 删除商品 显示购物车信息的功能.只用一个session就实现了 代码比较容易读懂,适合新手学习! 注意:有一个bug,最后一个del_cart()方法要先session_start(); 忘记加了!

    基于memcahe的session方法重写(PHP)

    PHP session跨服务器跨域解决方案 基于memcahe的session方法重写

    php session操作类

    这是一个比较完整,且比较安全的session操作类,集成了,基本的操作方法

    PHP中session全面教程.txt

    PHP中session全面教程.txt PHP中session全面教程.txt

    PHP实现多服务器session共享之memcache共享.rar

    PHP实现多服务器session共享之memcache共享

Global site tag (gtag.js) - Google Analytics