php中session过期时间设置及session回收机制介绍

更新时间:2014年05月05日 16:46:39   作者:

在网上可以找到修改配置文件中的session.gc_maxlifetime,如果想了解更多session回收机制,继续阅读

网上很多人给出了解答:修改配置文件中的session.gc_maxlifetime。如果想了解更多session回收机制,继续阅读。(本文环境php5.2)

概述:每一次php请求,会有1/100的概率(默认值)触发“session回收”。如果“session回收”发生,那就会检查/tmp/sess_*的文件,如果最后的修改时间到现在超过了1440秒(gc_maxlifetime的值),就将其删除,意味着这些session过期失效。

1. session在端(一般是 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而将其删除。这是我们不愿看到的,可以通过增加如下的简单代码解决这个问题:

<?phpif (!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编程中尝试程序并发的几种方式总结,这里举了借助yield的异步以及swoole_process的进程创建等例子,PHP本身并不支持多线程并发,需要的朋友可以参考下2016-03-03

这篇文章主要介绍了php实现登陆模块的方法,结合实例形式分析了php实现登陆功能的步骤与相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下2016-10-10

本篇文章是对PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思进行了详细的分析介绍,需要的朋友参考下2013-06-06

这篇文章主要介绍了PHP获取当前页面URL函数实例,讲述了一个非常简单实用的获取当前页面URL的函数,并附带说明了server参数的用法,需要的朋友可以参考下2014-10-10

这篇文章主要介绍了php实现复制移动文件的方法,实例分析了php实现针对文件的复制及移动的技巧,需要的朋友可以参考下2015-07-07

这篇文章主要介绍了Lnmp环境中设置多版本PHP共存的技巧,依靠php-fpm工具来进行管理,需要的朋友可以参考下2018-08-08

这篇文章主要介绍了php使用PDO事务配合表格读取大量数据插入操作实现方法,涉及php使用excel_reader操作Excel文件及PDO操作数据库的相关技巧,需要的朋友可以参考下2017-02-02

PHP has encountered an Access Violation at 7C94BD02解决方法2009-08-08

这篇文章主要介绍了PHP使用redis消息队列发布微博的方法,结合具体实例形式分析了php结合redis数据库操作消息队列实现微博发布的相关技巧与注意事项,需要的朋友可以参考下2017-06-06

php实现线性表顺序存储的代码,需要的朋友可以参考下2012-02-02

最新评论

php 查看session 时间,php中session过期时间设置及session回收机制介绍相关推荐

  1. c# redis hashid如何设置过期时间_Redis中Key过期策略amp;淘汰机制

    1. Redis中设置Key过期时间 我们有两种方式设置过期时间 1.1 设置多久后过期 设置一个 key 10s 过期,可以这样 127.0.0.1:6379> SET key value E ...

  2. linux密码修改时间,linux 查看、修改用户及密码过期时间(示例代码)

    WARNING: Your password has expired. Password change required but no TTY available. 提示密码过期, 设置新用户密码的过 ...

  3. linux查看用户到期时间,linux 查看、修改用户及密码过期时间

    WARNING: Your password has expired. Password change required but no TTY available. 提示密码过期, 设置新用户密码的过 ...

  4. oracle中用于返回日期和时间,oracle中日期和时间函数的使用

    日期和时间函数的使用 1,           SYSDATE:此函数用于返回系统当前日期 2,           ADD_MONTHS(日期,n):返回指定日期之前或之后的n个月所对应的日期(n为 ...

  5. linux和unix文件没有创建时间,Linux中没有文件创建时间的概念

    在Linux中,没有文件创建时间的概念.只有文件的访问时间.修改时间.状态改变时间.也就是说不能知道文件的创建时间.但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过, ...

  6. matlab仿真采样时间,系统中的采样时间 - MATLAB Simulink - MathWorks 中国

    纯离散系统 纯离散系统完全由离散模块组成,可以使用固定步长或可变步长求解器进行建模.要对离散系统进行仿真,需要仿真器在每个采样时间点执行一个仿真步.对于多速率离散系统 - Simulink® 以不同速 ...

  7. 查看七牛云生成qiniuUploadToken的过期时间

    Auth auth = Auth.create(accessKey, secretKey); String upToken = auth.uploadToken(bucket); System.out ...

  8. php代码时间控制,PHP 网页过期时间的控制代码

    当然,前提要先打开CDN中一个功能reload_into_ims on.这样用户发送过来no-cache也不怕了.因为这样会给给no-cache转成If-Modified-Since .所以我们写程序 ...

  9. php session 保存数组,php - 我用ajax设置的SESSION数组变量没有被保存?

    我有一个链接,当点击时,调用jquery ajax函数从php页面获取数据,并将返回的html放在一个弹出式div中. 返回的html实际上是一个表单.在PHP中,我正在查询数据库以获取与用户规格匹配 ...

  10. java 微秒 时间_Java中的当前时间(以微秒为单位)

    Java 9和更高版本:捕获当前时刻时,分辨率高达纳秒.那是9位数的小数. Instant.now() 2017-12-23T12:34:56.123456789Z 要限制为微秒,请截断. Insta ...

最新文章

  1. Typescript之 范型
  2. 迁移学习简介(transfer learning)
  3. Android 自动生成表格
  4. 使用Selenium模拟浏览器,实现自动爬取数据
  5. java-servlet
  6. 6 个 Java 工具,轻松分析定位 JVM 问题!
  7. 【Elasticsearch】腾讯万亿级 Elasticsearch 内存效率提升解密 源码级别 性能优化
  8. php折半查找算法,二分查找 [折半查找] 算法 PHP 版
  9. 英国FCA将比特币ATM加入未注册加密业务名单
  10. Teamcenter(Enterprise 2007) Admin 手法之 -- 移除relation
  11. 动手学深度学习Pytorch Task04
  12. ssl介绍以及双向认证和单向认证原理
  13. 跟燕十八学习PHP-第二十五天-mysqlgroup by和having的综合练习
  14. ahjesus sql2005+游标示例
  15. java压测请求线程数_jmeter压力测试 设置一秒发送一次请求,一秒两次请求
  16. 曼昆《经济学原理》-微观经济学-随记(一)
  17. 从极客到 CEO,开发者应该如何提升技术领导力?
  18. python 爬取图片网站图片链接并下载收集
  19. Duplicate entry for key 'PRIMARY'
  20. python—简单数据抓取六(安装scrapy环境并创建爬虫项目、以顶点小说网为例利用scrapy进行爬取、scrapy相关的注意事项)

热门文章

  1. Linux之YUM方式安装SVN
  2. 数据结构课程设计c语言-校园导游系统
  3. 中国知名it软件开发外包公司有哪些呢
  4. abaqus汉化后有结果界面中有中文乱码
  5. 在RT-Thread上移植EtherCAT开源主站SOEM1.4.0
  6. C# Winform 开发框架 devexpress控件源码
  7. assign ur here php,ecshop源码分析01
  8. 《游戏设计艺术(第二版)》读书笔记
  9. php寻仙记,寻仙记文字游戏完整实测源码 - 下载 - 搜珍网
  10. Hololens开发学习笔记——海康摄像头直播视频流