php配置session相关知识

来源:互联网 发布:sql right函数 编辑:程序博客网 时间:2024/06/05 08:07
>>本文链接地址:php配置session相关知识

php session有一个GC功能,就是Garbage Collector。这个GC启动的时候,会清除那些已经“超时”的session。它的工作原理:

1.用户访问并登陆网站,这时候后台会调用session_start来尝试生成一个会话(如果已经有会话,则相当于一次有效会话请求)
2.对于这样的每一次有效会话请求(Request),apache的php模块会根据session相关的全局变量gc_probability/gc_divisor =>计算出启动GC的概率,并由此概率来决定在这次请求中是否应该启动GC。举例来说,session.gc_probability的缺省值为1,session.gc_divisor的缺省值为100,则启动“垃圾回收”器的概率是1%,这就意味着在每100次请求中,会有可能清理一次过期会话
3.如果GC启动,则GC会扫描当前会话所在路径(session.save_path)下的所有会话文件,并根据另外一个全局变量session.gc_maxlifetime的多少来判断哪些session已经过期(“当前时间”与“会话文件的atime或者mtime”之间的差大于gc_maxlifetime:过期),并删除这些过期的session
4.如果你在一个session启动后,长时间没有任何交互操作(譬如,不停地码字,没有提交或者保存为草稿),那么你的保存在后台的会话文件将得不到机会被修改或者访问,在gc_maxlifetime(缺省值1440秒=24分钟)时间后,它有可能因失效而被清理,这以后你再提交,就会因为会话失效而报错

而关于SESSION 过期大家也应该有更明确的认识
只有session.cookie_lifetime 控制SESSIOn的过期时间.可以通过直接修改ini,或者通过ini_set();以及session_set_cookie_params()来修改。
虽然gc的最大过期时间可能比Session的过期时间短,但是还是按照session的过期时间过期。
注意: WEB是触发式的。所以在你直接关闭IE的情况下,session文件也是依然会存在的。

session默认以文件方式保存,不过太多的session在一个目录下是不利于存取的。php.ini里面有个设置可以让session分子目录保存
session.save_path = “N;/path” N表示几级子目录,比如你可以设置成 session.save_path = “2;/tmp”
但是你设置成分子目录后,原来的garbage collection 就没用了,需要你自己去清楚过期session,比如用个shell定时执行。