首页 > 作文

PHP实现提高SESSION响应速度的几种方法详解

更新时间:2023-04-07 13:58:04 阅读: 评论:0

本文实例讲述了php实现提高ssion响应速度的几种方法。分享给大家供大家参考,具体如下:

设置多级目录存储ssion

默认ssion的存储目录是1级目录,如果用户量比较大,ssion文件数量就比较大,我们可以设置目录数为2,使用2级目录可以提交查找和存取速度。不过这种方式对速度的提升一般不是很明显,可以通过修改php.ini,进而修改ssion存储目录数。

ssion.save_path = "2;/tmp"

将ssion存储到redis中

php中的ssion默认是存储在文件中的,支持redis存储方式,因为redis的键值数据时存储在内存中的,可以提高ssion的存取速度。

ssion.save_handler = redisssion.save_path = "tcp://127.0.0.1:6379"

及时释放ssion文件锁

我们在使用ssion时,需要先执行ssion_start()函数。

ssion_start()函数的作用如下:

判断http请求是否包含名为phpssid的cookie,如果没有则创建该cookie并写入到http响应的头文件。

通过phpssid查找对应的ssion文件,以读写方式打开的文件,然后读取里面的数据到内存。

然后我们一般会通过$_ssion这个超全局变量,读取或者设置ssion的值,我们操作的时候,ssion的值都是保存在内存中的,默认在页面执行完毕之后,才会写入到对应的文件中。

我们通过下面的一段代码测试这个过程:

ssion执行过程分析

include "ssion_function.php"; //ssion_function.php代码在附录ssion_start();$_ssion['name']="koastal";echo "<br/&交友诗句gt;html content<br/>";var_dump($_ssion);echo "<br/>";

输出结果

open
read
html content
array (size=1)
‘name’ => string ‘koastal’ (length=7)
shutdown
write
clo

通过上面的例子可以发现,在页面执行的过程中(页面的执行过程是指将php文件解析为对应的html文件的耗时,而不是用户在该页面上的停留时间),ssion文件是被锁定的。

对于一些耗时的操作,比如文件上传,发送邮件等,如果用户在页面upload.php文件中上传文件江门大学,然后他又打开了个人信息页面index.php,然而upload.php文件还没有执行完成,index.php中的ssion_start()就不能打开对于的ssion文件,一直等待到upload.php执行完毕。

ssion死锁示例程序

upload.php

<?phpssion_start();$_ssion['name']='koastal';sleep(10); //sleep 10s 模拟文件上传耗时

index.ph吴楚七国之乱p

<?phpssion_start();var_dump($_ssion);

通过上面的分析可以知道,s你的名字头像sion在页面执行完毕之后,才会写入到文件中,并释放文件锁。ssion的功能,我们一般都是在页面中的一部分用到的,当我们处理完ssion之后,可以使用ssion_commit()或者ssion_write_clo()函数,提前将ssion的值写入到文件中,并释放文件锁。

ssion_commit过程分析

include "ssion_function.php"; //ssion_function.php代码在附录ssion_start();$_ssion['name']="koastal";ssion_commit();echo "<br/>html content<br/>";var_dump($_ssion);echo "<br/>";

输出结果

open
read
write
clo

html content
array (size=1)
‘name’ => string ‘koastal’ (length=7)

shutdown

我们可以看到,在执行了ssion_commit()之后,就提前将ssion内容写到文件中,并且关闭文件(释放文件锁)了。

死锁示例优化后程序

upload.php

<?phpssion_start();$_ssion['name']='koastal';ssion_commit();sleep(10); //sleep 10s 模拟文件上传耗时

我们操作完ssion之后,先讲ssion数据写入到文件,然后再执行上传过程,就不会影响到其他页面使用该ssion文件了。

执行完ssion_commit之后

<?phpssion_start();$_ssion['name'] = "koastal";ssion_commit();echo $_ssion['name'];

ssion_commit的另一个名字是ssio团结造句n_write_clo,也就是将ssion信息写入并关闭文件的意思。ssion_commit之后,虽然ssion文件已经关闭,但是页面还在执行,只要没有执行ssion_unt内存中就还保存着ssion的值,所以我们还可以获取和输出ssion的值。其实,这个时候我们还可以给ssion赋值,但是这个赋值只是赋值到内存中,因为文件已经关闭,所以其他页面时访问不到ssion_commit();之后设置的ssion的值。

销毁ssion

既然已经探讨了这么多ssion的问题了,那么我们在说一下用户注销时,销毁ssion的操作。

通过上面的分析,我们知道ssion的值会保存在内存和文件两个地方。
ssion_start()会将对应文件打开,并将ssion数据读入到内存。
ssion_commit()会将内存中的ssion数据写入到文件中,并关闭文件。
不显示调用ssion_commit()的话,会在页面执行完毕之后,自动调用。

所以,我们需要删除内存中的ssion信息,并且删除ssion文件。

ssion_unt();  //删除内存中的ssion信息ssion_destory(); //删除ssion文件

如果我们只是用ssion_unt();也能达到注销用户的效果,但是这样处理时间上是把ssion的数据设置为空,并且写入ssion文件中了,本质上并没有删除ssion文件。

上面的两部操作,销毁了服务器上的ssion值,此外,我们还需要清理保存在客户端中的cookie,完成真正意义上的注销操作。

注销登录完整代码

logout.php

<?phpssion_unt();  //删除内存中的ssion信息ssion_destory(); //删除ssion文件tcookie('phpssid', null, time()-10);//将cookie值设置为过期

附录

ssion_function.php

<?phpfunction open($save_path, $ssion_name) {  echo __function__,"<br/>";  return (true);}function clo(){  echo __function__,"<br/>";  return (true);}function read($id){  echo __function__,"<br/>";}function write($id, $ss_data){  echo __function__,"<br/>";  return (true);}function destroy($id){  echo __function__,"<br />";  return(true);}function gc($maxlifetime){  echo __function__,"<br />";  return true;}ssion_t_save_handler("open", "clo", "read", "write", "destroy", "gc");register_shutdown_function('shutdown');function shutdown(){  echo __function__,"<br />";}

本文发布于:2023-04-07 13:58:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/e831b70f8498098fed72ec8a93b341a9.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP实现提高SESSION响应速度的几种方法详解.doc

本文 PDF 下载地址:PHP实现提高SESSION响应速度的几种方法详解.pdf

下一篇:返回列表
标签:文件   页面   内存   死锁
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图