PHP 解决session死锁的方法

今天在开发碰到个棘手的问题 。
当异步请求后台处理一个大数据量操作时  请求其他控制器都没返回信息了。。起初以为是Ext 框架设置了ajax同步造成的。
后来发现时session 死锁造成其他控制器在等待session 完成后才能操作。(主要是用户登录判断需要更新session)
当PHP 处理大数据量操作时 不能及时操作完成 这时候又有访问其他控制器或者
异步请求时候会造成session 死锁现象
和同事探讨了下 可使用 session_write_close() 解决此问题


代码如下:

Description
void session_write_close ( void )
End the current session and store session data.
Session data is usually stored after your script terminated without the need to call session_write_close(), but as session data is locked to prevent concurrent writes only one script may operate on a session at any time. When using framesets together with sessions you will experience the frames loading one by one due to this locking. You can reduce the time needed to load all the frames by ending the session as soon as all changes to session variables are done.

功能: 结束当前的session 操作 保存session 数据 
说的很明白了, 当脚本请求没有调用session_write_close(); 时虽然 session  的数据是存储住了。但是 session Date(也就是session 文件) 是锁住状态
是为了避免 其他应用此时操作session 造成不必要后果   当使用框架时 不同文件可能会不停地操作session 为了不造成其他操作对当前session 的死锁等待
可使用此函数...

(0)

相关推荐

  • php中session_id()函数详细介绍,会话id生成过程及session id长度

    php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来获取/设置 当前会话 ID.为了能够将会话 ID 很方便的附加到 URL 之后, 你可以使用常量 SID 获取以字符串格... php中session_id()函数原型及说明 session_id()函数说明: string session_id ([ string $id ] ) session_id() 可以用来获取/设置

  • php session应用实例 登录验证

    复制代码 代码如下: <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <form name="form1" method="post" action=

  • php中实现精确设置session过期时间的方法

    大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟) 这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: session.gc_probability = 1 session.gc_divisor = 1000 garbage

  • PHP中session变量的销毁

    1.何为session?相当于一个客户端(可以是浏览器.app.ftp等其他,而且同一个浏览器多开几个又算是不同的客户端)对服务器的一个访问,这个期间服务器为此建立一个唯一的标示(session_id session_name),其实也就是一个数组Array(),Session的开始和结束并不以业务上的输入用户名密码开始,也不以关闭浏览器和网页刷新而结束 2.session变量的销毁程序代码<?phpsession_unset();session_destroy();?> session_un

  • php基于session锁防止阻塞请求的方法分析

    本文实例讲述了php基于session锁防止阻塞请求的方法.分享给大家供大家参考,具体如下: 说明: 这是一篇参考国外网站http://konrness.com/php5/how-to-prevent-blocking-php-requests/ 的译文,前面一篇文章PHP编程中的Session阻塞问题与解决方法简单分析了php session阻塞的解决方法,这里给出另一种解决方法. 正文: 现代浏览器限制到一个host并发连接的数量一般为4或6.这意味着,如果您的web页面加载几十个来自同一个

  • PHP session文件独占锁引起阻塞问题解决方法

    PHP默认的会话处理器是session.save_handler = files(即文件).如果同一个客户端同时并发发送多个请求(如ajax在页面同时发送多个请求),且脚本执行时间较长,就会导致session文件阻塞,影响性能.因为对于每个请求,PHP执行session_start(),就会取得文件独占锁,只有在该请求处理结束后,才会释放独占锁.这样,同时多个请求就会引起阻塞.解决方案如下: (1)修改会话变量后,立即使用session_write_close()来保存会话数据并释放文件锁. s

  • PHP中session使用方法详解第1/2页

    由于 Session 是以文本文件形式存储在服务器端的,所以不怕客户端修改 Session 内容.实际上在服务器端的 Session 文件,PHP 自动修改 session 文件的权限,只保留了系统读和写权限,而且不能通过 ftp 修改,所以安全得多.PHPChina 开源社区门户 对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证.如果用户名和密码存储在数据库,每次都要执行一次数据库查

  • PHP中怎样保持SESSION不过期 原理及方案介绍

    PHP中如何保持SESSION以及由此引发的一些思考  最近的一个项目,里面有一个比较大的表单,用户完成它需要很多时间,很多用户花了千辛万苦完成之后,一提交发现SESSION过期,系统退出了,所以引起了研究如何设置SESSION以及保持SESSION在线的需要,下面是一些心得体会. 什么是SESSION?按照WIKI的解释,SESSION是存在于两个通信设备间的交互信息,在某一时间建立,经过一定的时间后失效.常见的SESSION有:TCP SESSION.WEB SESSION(HTTP SES

  • php session的锁和并发

    本文分享PHP的session在使用过程中的锁和并发的问题,与之相关的现象有请求阻塞.session数据丢失.session数据读不到. 我登录不了了 某天,我准备登录我们一个后台系统,前去解决一个bug,在账户密码验证码都准确输入的情况下,我登录不上,经过多次实验发现主要有两个错误信息: csrf验证失败 验证码错误[我对码神起誓我用半角输入了我看到的验证码,且顺序一致,无多加字符] 我们的系统 我们的系统是基于phalcon 2.0.8 开发的,如你所见,我们在表单域加入了防止csrf攻击的

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

    本文实例讲述了PHP编程中的Session阻塞问题与解决方法.分享给大家供大家参考,具体如下: 使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁.不同浏览器不会出现这种情况. 疑问:是不是session_start导致了阻塞? 于是,我写了几个页面测试了一下,发现是session导致了阻塞,而其他两种情况不会造成阻塞. 查了下PHP的Bug列表,发现有人提出了这个问题: Description: ------------ Calling session_

  • PHP会话控制:Session与Cookie详解

    本文介绍了PHP会话控制,主要阐述以下几点内容: • 会话控制的产生背景/概念 • cookie的维护与生命周期(有效时间) • session的维护与生命周期(回收机制) • cookie与session之间的区别与联系 • 问题1:禁用cookie后session为什么会失效? • 问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器正常) • session.cookie简单实例 理解会话控制的概念 理解一个概念就需要理解他的背景及产生

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

    解决session阻塞问题的办法:在session操作完成后调用session_write_close()即可避免此问题; 案例一: 使用session过程中,在开启session后,同一浏览器,执行同一程序,不同页面会被锁.不同浏览器不会出现这种情况. 疑问:是不是session_start导致了阻塞? 于是,我写了几个页面测试了一下,发现是session导致了阻塞,而其他两种情况不会造成阻塞. 查了下PHP的Bug列表,发现有人提出了这个问题: 复制代码 代码如下: Description:

随机推荐