关于修改session的生存时间以及回收机制
2018-03-28 21:49
633 查看
一、修改session的生存时间
1)通过php.ini修改//这里代表我们修改了session存在的最大时间 session.gc_maxlifetime = 86400
2)通过代码实现
$lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params($lifeTime); session_start();
二、关于session存在的解释
1)session机制当我们执行session_start()之后,就会生成一个sessionID,保存在$_COOKIE变量中(此时,该sessionID并没有保存到客户端,他仅仅存在于会话之中)。同时服务器端默认会在/tmp目录下建立一个session文件,文件名是用前缀“sess_”再加上当前的sessionID组合而成的,我暂且把他叫做sess文件吧。
2)cookie机制:
当使用cookie机制的时候,在sess文件中没有保存任何数据。而cookie中的数据,实际上是通过setcookie()的方法保存在客户端的。
并且,该方法只将指定的数据保存到了客户端,而sessionID并没有被保存到客户端。这个时候sessionID依然存在于会话之中。
当重新打开浏览器之后,我们发现当前的sessionID实际上已经不是之前的sessionID了,
但是cookie中的数据并不受影响,我们仍然可以通过$_COOKIE变量来获取cookie的值。
3)session文件的存储位置
在Linux下,这一路径通常为\tmp,在Windows下通常为C:\Windows\Temp。当服务器上有多个PHP应用时,它们会把自己的session文件都保存在同一个目录中。
三、session的回收机制GC(Garbage Collector)
1)GC的工作原理当一个有效请求发生时,PHP会根据全局变量session.gc_probability/session.gc_divisor(同样可以通过php.ini或者ini_set()函数来修改)的值,来决定是否启动一个GC(Garbage Collector)。
GC的工作,就是扫描所有的session信息,用当前时间减去session的最后修改时间(modified date),同session.gc_maxlifetime参数进行比较,如果生存时间已经超过gc_maxlifetime,就把该session删除。
2)控制GC的参数
session.gc_maxlifetime //代表session的最大存活时间 session.gc_probability session.gc_divisor
<
4000
p> session.gc_divisor 与 session.gc_probability 合起来定义了在每个会话初始化时启动 gc(garbage collection 垃圾回收)进程的概率。此概率用 gc_probability/gc_divisor 计算得来。
就比如我本地的php.ini中,
//此处代表每发生1000次php请求,就有可能执行一次GC回收 session.gc_probability = 1; session.gc_divisor = 1000;
这里建议大型的门户网站,可以通过减小GC回收发生的概率来提升网站的性能。
四、可能遇到的问题
1)gc_maxlifetime无效的情况答:GC在工作时,并不会区分不同站点的session。
具体参考链接:为什么gc_maxlifetime会失效
2)如何保证用过的session立刻删除
答:提升出发GC回收的几率。比如
session.gc_probability = 1000; session.gc_divisor = 1000; //这样触发的几率就是100%,缺陷就是很影响性能。
3)改变session文件的存储位置
<?php session_save_path("D:/www/session/rrr"); session_start(); //echo"sssss1"; $_SESSION[ "temp"] = "tpp "; ?>
这里需要注意的是需要在启动session之前就改变其存储位置。不然会失效。
4)如果有一些session不想删除怎么办
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>
解释:代码会每隔60秒,尝试修改一次session。这样该session文件的活跃时间就会一直在最大存活时间的范围内。从而达到一致存在的目的。
end
参考链接:
https://blog.csdn.net/gxrj11/article/details/51262848
https://www.cnblogs.com/hongfei/archive/2012/06/17/2552434.html
https://blog.csdn.net/xiaoniu__/article/details/72650311
http://www.jb51.net/article/49757.htm
相关文章推荐
- 修改session生存时间
- 关于图片oom以及图片回收机制
- PHP session有效时间和回收机制
- 如何修改SESSION的生存时间
- php如何修改SESSION的生存存储时间的实例代码
- php中session过期时间设置及回收机制详解
- php中session过期时间设置及session回收机制介绍
- 如何修改SESSION的生存时间
- 关于session默认过期时间的修改
- 20160405servlet学习笔记session技术防止非法访问以及session生存时间
- 关于linux系统下CST时间的修改以及对MB中关于CURRENT_TIMESTAMP函数
- php中session过期时间设置及session回收机制介绍
- php修改SESSION的有效生存时间
- 关于文件状态的三种时间,mtine ,ctime , atime 以及查看文件状态stat 和修改文件时间touch
- php如何修改SESSION的生存时间
- PHP里session有效时间和回收机制
- PHP如何修改session的生存时间
- 如何修改SESSION的生存时间
- 修改 session 的生存时间
- 修改session的生存时间