当前位置:首页 > 日记 > 正文

PHP中会话的分析可能导致并发问题。

PHP中会话的分析可能导致并发问题。
在开发Web应用程序,人们经常使用的会话存储数据。但是有些人可能不知道,在PHP中,会话使用不当可能会导致并发问题。基尚R,在plus91技术高级工程师,为印度医疗行业提供软件解决方案,阐述了个人博客的问题。

如果同一个客户端发送多个请求同时,和会话用于每个请求,PHP会话锁的存在会导致服务器的串行而非并行响应这些请求。这是因为,默认情况下,PHP使用文件来存储会话数据。每一个新的会话,PHP创建一个文件,将数据写入到它。所以,每一次你打电话给session_start()方法,你打开会话文件,获取文件的独占锁。这样,如果服务器脚本处理一个请求,和客户端发送另一个请求也需要使用会话,那么后者的要求将阻塞直到以前的请求处理完成,释放互斥锁的文件。不过,这是限制多来自同一客户端发请求,也就是说,从一个客户端请求不会阻止另一个客户端的请求。

如果脚本是短暂的,这通常是没有问题的。但是如果脚本运行时间更长,它可以是一个问题。在现代Web应用程序的发展,其中最常见的情况是使用Ajax技术来发送多个请求在同一页面上得到的数据。如果这些要求需要使用会话,然后第一个请求到达服务器后得到会话锁,和其他请求必须等待,所有的请求将被处理的串行,即使他们不是相互依赖。这将大大增加网页的响应时间。

为了避免这个问题的方法之一是调用session_write_close()方法立即关闭会话会话后使用。所以会话锁将被释放,即使当前的脚本还等待处理。重要的是要注意,当方法被调用时,当前脚本将无法会议进一步操作。

重要的是指出问题和观点的论述只适用于PHP默认的会话管理模式下使用session_start()方法。例如,有用户指出,如果应用程序托管在AWS EC2和DynamoDB是正确配置会话锁定的问题将不会出现。

附上一个示例代码。

session.php

< PHP

最后一节课sessioncontroller延伸yafcontroller_abstract
{
公共功能setuserfileaction()
{
session_start();
_session美元{ 'user_name} = 'xudianyang;
_session美元{ 'user_id} = '123;

睡眠(3);
回声json_encode($ _session);
返回false;
}

公共功能setloginfileaction()
{
session_start();
_session美元{ 'last_time} =时间();

回声json_encode($ _session);
返回false;
}

公共功能indexfileaction()
{
把视图 / /自动
}

公共功能getsessionfileaction()
{
session_start();
var_dump($ _session);

返回false;
}

公共功能setuserredisaction()
{
$ SESSION = corefactory::会议();
$ SESSION ->设置('user_name ','xudianyang);
$session->set ('user_id','123');

睡眠(3);
回声json_encode($ _session);
返回false;
}

公共功能setloginredisaction()
{
$ SESSION = corefactory::会议();
$ SESSION ->设置('last_time时间());

回声json_encode($ _session);
返回false;
}

公共功能indexredisaction()
{
把视图 / /自动
}

公共功能getsessionredisaction()
{
$ SESSION = corefactory::会议();
var_dump($ _session);

返回false;
}
}

indexfile.phtml

测试会话并发锁问题
$ ajax({
网址: / / setuserfile会话
键入:获取
DataType:JSON
成功:函数(响应){
Console.info(响应。last_time);
}
});
setTimeout(){()函数(
$ ajax({
网址: / / setloginfile会话
键入:获取
DataType:JSON
成功:函数(响应){
Console.info(响应。last_time);
}
});
},300);
同时启动2个Ajax请求
indexredis.phtml

测试会话并发锁问题
$ ajax({
网址: / / setuserredis会话
键入:获取
DataType:JSON
成功:函数(响应){
Console.info(响应。last_time);
}
});
setTimeout(){()函数(
$ ajax({
网址: / / setloginredis会话
键入:获取
DataType:JSON
成功:函数(响应){
Console.info(响应。last_time);
}
});
},300);
同时启动2个Ajax请求
以上是本文的全部内容,希望大家能喜欢。

相关文章

广告和创意不同于广告和创意之间的

广告和创意不同于广告和创意之间的

解释,创意,不同于,广告,差异,广告和创意是不一样的,但很多朋友往往混淆广告和创意,这是错误的。下面的小编辑会告诉你广告和创意之间的区别。看看它。 多年来,我们一直把广告和创意混为一谈,在美国广告史上,广告界一直有两派,一个是理科学校,另一…

如何免费申请QQQQ技术

如何免费申请QQQQ技术

免费申请,技术,电脑软件,QQQQ,QQ,在当今时代不可或缺的社会性软件,可以说是由男人、妇女和儿童。Today Xiaobian已申请到一个长老的新QQ,或是简单的年轻人。但是对于老一代,他们习惯于依赖我们,不知道如何注册QQ号。下面的路饭网小编辑和新朋友…

ThinkPHP+smarty+Uploadify实现无

ThinkPHP+smarty+Uploadify实现无

上传,无刷新,电脑软件,ThinkPHP,smarty,在本文中,无法刷新上传ThinkPHP + smarty + Uploadify描述。分享给你供你参考。以下是如下: 模板文件代码: / / uploadify.css uploadify rel=样式表type=文本/ CSS / > $(函数(){()) $(# file_upload)。Uplo…

函数window.open关闭所有子窗口

函数window.open关闭所有子窗口

子窗口,函数,电脑软件,open,window,本文介绍了如何用window.open方法打开一个子窗口,当我们要关闭主窗口的所有子窗口也关闭了。下面是我的实现思路和代码,分享给大家。 实现这个想法: 1。第二个参数winname,打开的窗口函数window.open(url,win…

一种禁止页面刷新和返回的JS方法

一种禁止页面刷新和返回的JS方法

方法,页面刷新,电脑软件,JS,本文阐述了JS禁止页面刷新和后退的方法,供大家参考,具体实现方法如下: 禁止使用F5键 document.onkeydown()函数 { 如果(密码= = 116事件。) { = 0的情况下; event.cancelbubble =真; 返回false; } } 右弹出菜单 document.o…

PS制作多彩文字叠加发光效果

PS制作多彩文字叠加发光效果

叠加,文字,多彩,效果,电脑软件,本教程是介绍朋友制作多彩PS使用文字叠加的发光效果教程,文字很漂亮,不是很难,非常适合初学者学习,推荐,爱好的朋友一起学习。 学习本教程教ps文字效果,研究人员使用PS制作的彩色文本叠加,效果好的教程使文本效果美…

绝版QQ秀有过期时间吗QQ常见问题

绝版QQ秀有过期时间吗QQ常见问题

常见问题,时间,电脑软件,QQ,绝版物品和其他物品如QQ显示将过期。建议在商品到期前及时续费,以确保您能将货物打印出来,随着时间的推移,您将越来越多的贵重物品绝版。 温馨提示:如果您开通了红色钻服务,您可以在红钻过程中免费保存您的打印项目,同…

PS图象处理软件创建了一幅美丽的女

PS图象处理软件创建了一幅美丽的女

阳光,一幅,图象,清爽,处理软件,有时候我们对夏天拍的照片不太满意。今天萧边给我们带来了一个用PS快速夏季冷色调,这是清凉。 图片很好,但是背景有点乱,不够清晰。在处理时,你可以先添加浅蓝色高光泽,然后用模糊工具处理远程背景模糊,然后用调色…

PS如何导入CAD技术图纸

PS如何导入CAD技术图纸

图纸,技术,电脑软件,PS,CAD,PS如何导入CAD技术图纸从CAD图纸后出口,然后您可以导入PS图象处理软件(PS)编辑。那么我们该如何导入呢让我们一起来看看教程的详细介绍,你需要的朋友可以参考一下。 从CAD图纸后出口,然后您可以导入PS图象处理软件(PS)…

对coreldraw9立体工具使用介绍

对coreldraw9立体工具使用介绍

工具使用,电脑软件,This tutorial is a presentation to friends about the use of stereoscopic tools in CorelDRAW9. 教程很简单。非常适合初学者。 使用本教程介绍coreldraw9朋友立体工具,本节开始前,我先说明一个事实:coreldraw9是coreld…

Excel表用可视化管理器保存多个打

Excel表用可视化管理器保存多个打

窗体,可视化管理器,多个,页面,电脑软件,Excel表格使用可视化管理器保存多个打印页面。有些工作表经常需要打印不同的区域,使用可视化管理器栏。 1,打开需要打印的工作表,在打印行或列上拖动鼠标,不打印,选择鼠标右键单击鼠标。在随后的快捷菜单…

地图地图显示省级和省级代码共享

地图地图显示省级和省级代码共享

显示,省级,地图,代码,电脑软件,这是一个基于jQuery实现地图悬停显示的省代码。这样一个神奇的地图,便于我们更好的了解中国,增加我们的地理知识。 以下是效果图不是很大。 效果演示源代码下载 为大家分享jQuery的地图地图悬停显示省市代码…