关于session文件的删除

发布于 2022-09-04 10:34:42 字数 277 浏览 8 评论 0

假如session的生命周期为24分钟,但是由于还没有触发删除机制(Session.gc_probability / Session.gc_divisor),也就是过期的session文件没有被删除,那么我浏览器没有关闭的情况下,cookie里的PHPSESSID还在,所以还会找到原有的session文件,所以还能获取session里的内容
而即便是浏览器关掉了,我设定了之前同样的session_id,假设过期的session文件还没有删除,依然可以获取到值
我的测试结果应该没问题吧,感觉这个逻辑有点别扭啊,求解,谢谢诸位

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日情怀 2022-09-11 10:34:42

你没有设置cookie 过期时间时,那么随着浏览器的关闭,cookie也就失效了,再开启浏览器时cookie 会重新注册生成新的sessionid ,也就是新的session文件在服务器上,而旧的session 文件也是在服务器上,然后php 会通过垃圾回收机制进行处理

摘星┃星的人 2022-09-11 10:34:42

你可以参考一下这篇文章PHP中的cookie和session

苏大泽ㄣ 2022-09-11 10:34:42

这是文档上的说明

GC 的运行时机并不是精准的,带有一定的或然性,所以这个设置项并不能确保 旧的会话数据被删除。某些会话存储处理模块不使用此设置项。 更多的信息请参考会话存储模块的完整文档。 虽然开发人员不能完全依赖这个设置,但是还是建议将其设置的尽可能的小。 调整 session.gc_probability 和 session.gc_divisor 配置项 可以使得过期的会话数据在适当的周期内被删除。 如果需要使用自动登录的功能,请使用其他更加安全的方式自行实现,而不要通过使用长生命周期的会话 ID 来实现。

这里有一篇鸟哥关于session过期的博文如何设置一个严格30分钟过期的Session

但好像还是没能解释“session文件过期后,未被GC的session文件能否被读取”的疑问,session文件虽然存在,但是PHP能根据文件修改时间判断是否过期,应该就能不把session写入到$_SESSION里头

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文