PHP实现提高SESSION响应速度的几种方法详解
php  /  管理员 发布于 7年前   140
本文实例讲述了PHP实现提高SESSION响应速度的几种方法。分享给大家供大家参考,具体如下: 设置多级目录存储SESSION 默认session的存储目录是1级目录,如果用户量比较大,session文件数量就比较大,我们可以设置目录数为2,使用2级目录可以提交查找和存取速度。不过这种方式对速度的提升一般不是很明显,可以通过修改php.ini,进而修改session存储目录数。 将SESSION存储到redis中 php中的session默认是存储在文件中的,支持redis存储方式,因为redis的键值数据时存储在内存中的,可以提高session的存取速度。 及时释放SESSION文件锁 我们在使用session时,需要先执行 判断http请求是否包含名为PHPSESSID的cookie,如果没有则创建该cookie并写入到http响应的头文件。 通过PHPSESSID查找对应的session文件,以读写方式打开的文件,然后读取里面的数据到内存。 然后我们一般会通过$_SESSION这个超全局变量,读取或者设置session的值,我们操作的时候,session的值都是保存在内存中的,默认在页面执行完毕之后,才会写入到对应的文件中。 我们通过下面的一段代码测试这个过程: session执行过程分析 输出结果 open 通过上面的例子可以发现,在页面执行的过程中(页面的执行过程是指将php文件解析为对应的html文件的耗时,而不是用户在该页面上的停留时间),session文件是被锁定的。 对于一些耗时的操作,比如文件上传,发送邮件等,如果用户在页面upload.php文件中上传文件,然后他又打开了个人信息页面index.php,然而upload.php文件还没有执行完成,index.php中的session_start()就不能打开对于的session文件,一直等待到upload.php执行完毕。 session死锁示例程序 upload.php index.php 通过上面的分析可以知道,session在页面执行完毕之后,才会写入到文件中,并释放文件锁。session的功能,我们一般都是在页面中的一部分用到的,当我们处理完session之后,可以使用session_commit()或者session_write_close()函数,提前将session的值写入到文件中,并释放文件锁。 session_commit过程分析 输出结果 open html content shutdown 我们可以看到,在执行了 死锁示例优化后程序 upload.php 我们操作完session之后,先讲session数据写入到文件,然后再执行上传过程,就不会影响到其他页面使用该session文件了。 执行完session_commit之后 session_commit的另一个名字是session_write_close,也就是将session信息写入并关闭文件的意思。session_commit之后,虽然session文件已经关闭,但是页面还在执行,只要没有执行session_unset内存中就还保存着session的值,所以我们还可以获取和输出session的值。其实,这个时候我们还可以给session赋值,但是这个赋值只是赋值到内存中,因为文件已经关闭,所以其他页面时访问不到session_commit();之后设置的session的值。 销毁session 既然已经探讨了这么多session的问题了,那么我们在说一下用户注销时,销毁session的操作。 通过上面的分析,我们知道session的值会保存在内存和文件两个地方。 所以,我们需要删除内存中的session信息,并且删除session文件。 如果我们只是用 上面的两部操作,销毁了服务器上的session值,此外,我们还需要清理保存在客户端中的cookie,完成真正意义上的注销操作。 注销登录完整代码 logout.php 附录 session_function.php 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php缓存技术总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家PHP程序设计有所帮助。session.save_path = "2;/tmp"
session.save_handler = redissession.save_path = "tcp://127.0.0.1:6379"
session_start()
函数。session_start()
函数的作用如下:include "session_function.php"; //session_function.php代码在附录session_start();$_SESSION['name']="koastal";echo "
html content
";var_dump($_SESSION);echo "
";
read
html content
array (size=1)
'name' => string 'koastal' (length=7)
shutdown
write
closeinclude "session_function.php"; //session_function.php代码在附录session_start();$_SESSION['name']="koastal";session_commit();echo "
html content
";var_dump($_SESSION);echo "
";
read
write
close
array (size=1)
'name' => string 'koastal' (length=7)session_commit()
之后,就提前将session内容写到文件中,并且关闭文件(释放文件锁)了。session_start()
会将对应文件打开,并将session数据读入到内存。 session_commit()
会将内存中的session数据写入到文件中,并关闭文件。
不显示调用session_commit()
的话,会在页面执行完毕之后,自动调用。session_unset(); //删除内存中的session信息session_destory(); //删除session文件
session_unset();
也能达到注销用户的效果,但是这样处理时间上是把session的数据设置为空,并且写入session文件中了,本质上并没有删除session文件。"; return (true);}function close(){ echo __FUNCTION__,"
"; return (true);}function read($id){ echo __FUNCTION__,"
";}function write($id, $sess_data){ echo __FUNCTION__,"
"; return (true);}function destroy($id){ echo __FUNCTION__,"
"; return(true);}function gc($maxlifetime){ echo __FUNCTION__,"
"; return true;}session_set_save_handler("open", "close", "read", "write", "destroy", "gc");register_shutdown_function('shutdown');function shutdown(){ echo __FUNCTION__,"
";}您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号