网上很多人给出了解答:修改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过期时间设置相关推荐

  1. php中session时间,php中session过期时间的设置方法

    php中session过期时间的设置方法 发布时间:2020-04-22 10:21:19 来源:亿速云 阅读:140 作者:小新 今天小编给大家分享的是php中session过期时间的设置方法,相信 ...

  2. php网站源码 设置有效时间,精确设置php中session过期时间的方法

    session过期时间在大多数据情况下我们是设置默认的时间,如果我们有一些特殊的要求可以设置一下session过期时间了,下面我整理了在使用session中一些问题与解决方法,希望例子对各位会有帮助. ...

  3. C#发布网站在web.config和IIS中设置Session过期时间

    C#发布网站在web.config和IIS中设置Session过期时间 web.config <system.web> <sessionState mode="InProc ...

  4. cookielifetime php_php中实现精确设置session过期时间的方法

    大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session. ...

  5. 设置session时间 php,php中实现精确设置session过期时间的方法

    这篇文章主要介绍了php中实现精确设置session过期时间的方法,需要的朋友可以参考下 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一 ...

  6. 转:设置session过期时间

    原文地址:设置session过期时间 Session一直是我们做web项目经常使用的,以前没太注意,这次又细致的看了下! 1.session其实就是一个Map,键=值对,通过session.getAt ...

  7. java设置过期时间_java设置session过期时间的实现方法

    本文实例讲述了java设置session过期时间的实现方法,分享给大家供大家参考.具体实现方法如下: 1.Timeout in the deployment descriptor (web.xml) ...

  8. session过期时间控制的一些常用方法

    来源:http://blog.csdn.net/luo_yifan/article/details/4659392 在一般系统登录后,都会设置一个当前session失效的时间,以确保在用户没有使用系统 ...

  9. session过期时间设置

    设置session过期有三种方法: 1.在tomcat中进行设置 tomcat的conf文件下的,web.xml文件中 tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不 ...

最新文章

  1. 【.NET程序性能分析】使用VS自带的工具分析.NET程序的性能
  2. Exception in thread main java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  3. Adobe Acrobat Pro设置高亮快捷键
  4. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
  5. 信息学奥赛一本通(2030:【例4.16】找素数)
  6. 微软《我的世界》PC Java版销量超过3000万
  7. Java周记(第五周)
  8. java自行车e2_摩托罗拉E2 JAVA应用程序安装指南
  9. 潘赟九宫格写作总结(精简背诵版)
  10. Android 微信授权登陆
  11. 安装了本地MySQL后,小皮面板上的MySQL就一直启动失败
  12. php判断移动端和pc端访问_PHP函数判断移动端和PC端
  13. 7-6,输入厘米,输出英尺英寸
  14. JVM中栈的frames详解
  15. 7.6-7.13牟尼沟、若尔盖旅游日记
  16. 1.2.1 python中的函数
  17. 怎么查忘仙服务器信息,忘仙怎么跨服战斗 跨服玩法介绍[多图]
  18. getInputStream/getReader() has already been called for this request
  19. 论文排版2-Latex排版
  20. 我的译作《精通OpenStack》上架啦:书籍介绍和译者序

热门文章

  1. 利用高斯金字塔制作图像显著图
  2. 目标检测性能评价指标mAP、Precision、Recall、IoU
  3. [Common 17-39] ‘connect_bd_intf_net‘ failed due to earlier errors. 的解决办法
  4. Python基本语法(一)
  5. 1. 少了一个PermMissingElem Find the missing element in a given permutation.
  6. Java Collection Framework
  7. Ubuntu 14.04卸载安装失败的Mysql数据库,以及重新安装配置
  8. kettle的乱码和null值无法插入
  9. [导入]用事件和异常返回多种结果
  10. 【原创】告别恼人的水平滚动条——滚动条宽度到底是多少?