PHP session过期机制和配置

问题:使用PHP session时会遇到明明超过了session过期时间,但session依然完好无损的活着,让人头大。

其实仔细看一下php.ini关于PHP session回收机制就一目了然了。

session 回收机制:

PHP采用Garbage Collection process对过期session进行回收,然而并不是每次session建立时,都能够唤起 ‘garbage collection‘ process ,gc是按照一定概率启动的。这主要是出于对服务器性能方面的考虑,每个session都触发gc,浏览量大的话,服务器吃不消,然而按照一定概率开启gc,当流览量大的时候,session过期机制能够正常运行,而且服务器效率得到节省。细节应该都是多年的经验积累得出的。

三个与PHP session过期相关的参数(php.ini中):

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440

gc启动概率 = gc_probability / gc_divisor = 0.1%

session过期时间 gc_maxlifetime ,单位:秒

建议:

自己测试时,当然把这个session过期概率设置越大越好,过期效果才明显。

当web服务正式提供时,session过期概率就需要根据web服务的浏览量和服务器的性能来综合考虑session过期概率。为每个session都开启gc,显然是很不明智的。

变通方法:

手动在代码中为session设定上次访问时间,并且每次访问的时候判断访问间隔是否超过时间限制,超过手动销毁session,未超过则更新上次访问时间。这种方法还可以限制两次访问间隔。

配置文件摘录(来自php.ini),英文的原汁儿原味儿

; Defines the probability that the ‘garbage collection‘ process is started
; on every session initialization. The probability is calculated by using
; gc_probability/gc_divisor. Where session.gc_probability is the numerator
; and gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request.
; Default Value: 1
; Development Value: 1
; Production Value: 1
; http://php.net/session.gc-probability
session.gc_probability = 1

; Defines the probability that the ‘garbage collection‘ process is started on every
; session initialization. The probability is calculated by using the following equation:
; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
; session.gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request. Increasing this value to 1000 will give you
; a 0.1% chance the gc will run on any give request. For high volume production servers,
; this is a more efficient approach.
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
; http://php.net/session.gc-divisor
session.gc_divisor = 1000

; After this number of seconds, stored data will be seen as ‘garbage‘ and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
session.gc_maxlifetime = 1440

延伸阅读:PHP垃圾回收机制防止内存溢出

时间: 2024-08-29 10:03:23

PHP session过期机制和配置的相关文章

[session]PHP的session机制,配置与高级应用

--------------------------------------------------------------------------------------------------------- 一. PHP的session原理: 1.开启session_start(),服务器端产生session文件,将相关信息存储到这个文件中,文件以"sess_"为前缀,连接session_id()值来命名(内容是由特定算法生成的用户的明文信息,大型项目则须进行加密处理),同时将se

springboot shiro session过期时间配置

第一种方式:使用内置tomcat容器配置:在application.properties配置: #session过期时间(单位秒)  默认1800s(30min) #设置小于60秒,则会默认取1分钟 #实际过期时间为秒数对分钟取整,比如设置2000,则 2000s/60=33min,33min*60=1980s,实际过期时间为1980s server.session.timeout=3600 说明:该种方式只有使用内部tomcat时有效(EmbeddedServletContainerCusto

基于LNMT的Session持久机制的多种方案实现及深入分析

1. Session机制 Session就是会话,就是指的是对话双方或者交互双方建立的信息通道,从建立连接到断开连接的整个过程,称为一个会话.它是一种网络持久化的机制. HTTP协议是一种无状态协议,客户端和服务器建立连接传输完数据后即断开连接,客户端再次发起连接后,服务器端无法知道这个连接是否和上一个连接有什么关系,它只能认为是不同的连接. 为了解决这个问题,一般采用的方法有两种: 客户端保持,即cookie机制 服务器端保持,即session机制.为了保持这个状态信息,它要让客户端至少保留一

php中session实现机制

一.默认机制,用磁盘文件来实现PHP会话.php.ini配置:session.save_handler = files 1.session_start() A. session_start()是session机制的开始(在此之前不予许有任何输入值),它有一定概率开启垃圾回收,因为session是存放在文件中, PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的, 但是有的系统是 session.gc_probability =0,这也就是说概

转:php中实现精确设置session过期时间的方法

原文来自于:http://www.jb51.net/article/52309.htm 大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间. 对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用!其实不是不起作用,而是因为系统默认: ? 1 2 session.gc_pr

自定义session过期时间

参考:http://www.jb51.net/article/52309.htm 在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟). 这里你可以随便设置一下过期时间.但是有人说设置以后,好象不起作用! 其实不是不起作用,而是因为系统默认: session.gc_probability = 1 session.gc_divisor = 1000 garbage collection 有个概率的,1/1000就是session

C#如何设置session过期时间

1.操作系统  步骤:开始——〉管理工具——〉Internet信息服务(IIS)管理器——〉网站——〉默认网站——〉  右键“属性”——〉主目录——〉配置——〉选项——〉启用会话状态——〉会话超时(在这儿设置你要的超时时间,单位分钟).确定即可.2.ASP.NET应用程序中Session过期时间的设置  在ASP.NET这样的Web应用中,Session是用来保存用户状态的常用手段,不过由于服务器内存空间是有限的,所以Session过期时间设置是很有必要的.  在ASP.NET中如何设置Sess

asp.net web.config 设置Session过期时间

在Asp.net中,可以有四处设置Session的过期时间:(原文作者:望月狼地址:http://www.cnblogs.com/wangyuelang0526/) 一.全局网站(即服务器)级 IIS-网站-属性-Asp.net-编辑配置-状态管理-会话超时(分钟)-设置为120,即为2小时,即120分钟后如果当前用户没有操作,那么Session就会自动过期. 二.网站级 IIS-网站-具体网站(如DemoSite)-属性-Asp.net,此时有两个选项,一个是“编辑全局配置”,一个是“编辑配置

atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制

atitit. access token是什么??微信平台公众号开发access_token and Web session保持状态机制 1. token机制and  session保持状态机制 1 2. access token是什么?? 1 3. 为什么需要access token 2 4. 需不需要保存access_token,如何保存??? 2 5. access_token在何时被创建 2 6. 为什么不直接使用appid保持状态 2 7. access_token的过期问题 3 8.