php修改sessiob时间_php中session过期时间设置
网上很多人给出了解答:修改php配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)
概述:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。
1. session在server端(一般是Apache with PHP module)如何存在的?
默认的,php会将session保存在/tmp目录下,文件名为这个样子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:"jiangfeng";admin|s:1:"0";
#变量名|类型:长度:值
删除这里的session文件,就表示对应的session失效了。
2. session在client端(一般是浏览器)如何存在的?
session在浏览器端,只需要保存session ID(由server端生成的唯一ID)就可以了。有两种保存方式:在cookie中、在url里面。如果cookie中保存session ID,就可以看到浏览器的cookie中有一个PHPSESID变量。如果是URL传递的,就可以看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通过session.use_cookies来控制使用哪一种方式)
3. 在server端,php如何判断session文件是否过期?
如果"最后的修改时间"到"现在"超过了gc_maxlifetime(默认是1440)秒,这个session文件就被认为是过期了,在下一次session回收的时候,如果这个文件仍然没有被更改过,这个session文件就会被删除(session就过期了)。
简单的说,如果我登录到某网站,如果在1440秒(默认值)内没有操作过,那么对应的session就认为是过期了。
所以,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)
session.gc_maxlifetime = 86400
然后,重启你的web服务(一般是apache)就可以了。
注意:php5里面session过期使用了回收机制。这里设置时间为86400秒,如果session在86400秒内没有被修改过,那么在下一次“回收”时才真的被删除。
3. session“回收”何时发生?
默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的
#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。
注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:cd /path/to/sessions; find -cmin +24 | xargs rm
4. 一些特殊情况
因为回收机制会检查文件的“最后修改时间”,所以如果某个会话是活跃的,但是session的内容没有改变过,那么对应的session文件也就没有改变过,回收机制会认为这是一个长时间没有活跃的session而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
代码会每隔60秒,尝试修改修改一次session。
总结:如果想修改session过期时间,修改变量gc_maxlifetime就可以了。php5的session采用被动的回收机制(garbage collection)。过期的session文件不会自己消失,而是通过触发“回收”来处理过期的session。
参考文献:
php修改sessiob时间_php中session过期时间设置相关推荐
- php中session时间,php中session过期时间的设置方法
php中session过期时间的设置方法 发布时间:2020-04-22 10:21:19 来源:亿速云 阅读:140 作者:小新 今天小编给大家分享的是php中session过期时间的设置方法,相信 ...
- php网站源码 设置有效时间,精确设置php中session过期时间的方法
session过期时间在大多数据情况下我们是设置默认的时间,如果我们有一些特殊的要求可以设置一下session过期时间了,下面我整理了在使用session中一些问题与解决方法,希望例子对各位会有帮助. ...
- C#发布网站在web.config和IIS中设置Session过期时间
C#发布网站在web.config和IIS中设置Session过期时间 web.config <system.web> <sessionState mode="InProc ...
- cookielifetime php_php中实现精确设置session过期时间的方法
大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session. ...
- 设置session时间 php,php中实现精确设置session过期时间的方法
这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一 ...
- 转:设置session过期时间
原文地址:设置session过期时间 Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下! 1.session其实就是一个Map,键=值对,通过session.getAt ...
- java设置过期时间_java设置session过期时间的实现方法
本文实例讲述了java设置session过期时间的实现方法,分享给大家供大家参考.具体实现方法如下: 1.Timeout in the deployment descriptor (web.xml) ...
- session过期时间控制的一些常用方法
来源:http://blog.csdn.net/luo_yifan/article/details/4659392 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统 ...
- session过期时间设置
设置session过期有三种方法: 1.在tomcat中进行设置 tomcat的conf文件下的,web.xml文件中 tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不 ...
最新文章
- 【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能
- Exception in thread main java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
- Adobe Acrobat Pro设置高亮快捷键
- Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
- 信息学奥赛一本通(2030:【例4.16】找素数)
- 微软《我的世界》PC Java版销量超过3000万
- Java周记(第五周)
- java自行车e2_摩托罗拉E2 JAVA应用程序安装指南
- 潘赟九宫格写作总结(精简背诵版)
- Android 微信授权登陆
- 安装了本地MySQL后,小皮面板上的MySQL就一直启动失败
- php判断移动端和pc端访问_PHP函数判断移动端和PC端
- 7-6,输入厘米,输出英尺英寸
- JVM中栈的frames详解
- 7.6-7.13牟尼沟、若尔盖旅游日记
- 1.2.1 python中的函数
- 怎么查忘仙服务器信息,忘仙怎么跨服战斗 跨服玩法介绍[多图]
- getInputStream/getReader() has already been called for this request
- 论文排版2-Latex排版
- 我的译作《精通OpenStack》上架啦:书籍介绍和译者序
热门文章
- 利用高斯金字塔制作图像显著图
- 目标检测性能评价指标mAP、Precision、Recall、IoU
- [Common 17-39] ‘connect_bd_intf_net‘ failed due to earlier errors. 的解决办法
- Python基本语法(一)
- 1. 少了一个PermMissingElem Find the missing element in a given permutation.
- Java Collection Framework
- Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置
- kettle的乱码和null值无法插入
- [导入]用事件和异常返回多种结果
- 【原创】告别恼人的水平滚动条——滚动条宽度到底是多少?