PHP:session垃圾回收机制

在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁,这是PHP的GC垃圾处理机制,防止内存溢出。

实例

session.gc_probability = 1       //概率
session.gc_divisor = 1000        //除数
session.gc_maxlifetime = 86400   //session文件的有效期,单位s

这三个配置组合构建服务端session的垃圾回收机制。
当用户登录时,session_start()会在服务器上产生一个session文件,并把这个文件的有效期设置成86400(即24小时),这些文件会占用服务器磁盘空间,所以服务器会定期清理,那么多久清理一次呢? session.gc_probability / session.gc_divisor = 1/1000 即每1000次登录(即调用session_start()),就会执行1次垃圾清理,将磁盘上没用的session文件删除。

session.gc_maxlifetime的值的作用

GC的工作就是扫描所有的session文件信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除。

session.gc_probability和session.gc_divisor的值的作用

总的来说,session.gc_probability与session.gc_divisor构成了执行session清理的概率。
当一个有效的请求发生时,PHP会根据全局变量 session.gc_probability和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下,session.gc_probability=1, session.gc_divisor =100也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随着这100个中的某个请求而启动)。

扩展阅读

不管是关闭网页也好,关闭浏览器也罢,甚至把浏览器删掉重装了,都不会影响到已经生成的 session。
一言以蔽之,所有浏览器行为都不会导致 session 被自动销毁。
用户关闭浏览器再开,因为 cookie 失效他会获得一个新的 session。
但这并不代表他原来的 session 就被销毁了,那个 session 依然在服务器上存在。
如果在浏览器上手动把名字等于 session.name 的那个 cookie 的值改回之前的 session_id(),还是可以重新获得之前的那个 session 的。
参考:https://segmentfault.com/q/1010000000191102 (一楼回答)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值