千家信息网

如何理解PHP中设置一个严格30分钟过期Session的问题

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要讲解了"如何理解PHP中设置一个严格30分钟过期Session的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何理解PHP中设置一个
千家信息网最后更新 2025年01月18日如何理解PHP中设置一个严格30分钟过期Session的问题

这篇文章主要讲解了"如何理解PHP中设置一个严格30分钟过期Session的问题",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"如何理解PHP中设置一个严格30分钟过期Session的问题"吧!

第一种回答

那么, 最常见的一种回答是: 设置Session的过期时间, 也就是session.gc_maxlifetime, 这种回答是不正确的, 原因如下:

1. 首先, 这个PHP是用一定的概率来运行session的gc的, 也就是session.gc_probability和session.gc_divisor(介绍参看 PHP使用Session遇到的一个Permission denied Notice解决办法), 这个默认的值分别是1和100, 也就是有1%的机会, PHP会在一个Session启动时, 运行Session gc. 不能保证到30分钟的时候一定会过期.

2. 那设置一个大概率的清理机会呢? 还是不妥, 为什么? 因为PHP使用stat Session文件的修改时间来判断是否过期, 如果增大这个概率一来会降低性能, 二来, PHP使用"一个"文件来保存和一个会话相关的Session变量, 假设我5分钟前设置了一个a=1的Session变量, 5分钟后又设置了一个b=2的Seesion变量, 那么这个Session文件的修改时间为添加b时刻的时间, 那么a就不能在30分钟的时候, 被清理了. 另外还有下面第三个原因.

3. PHP默认的(Linux为例), 是使用/tmp 作为Session的默认存储目录, 并且手册中也有如下的描述:

Note: 如果不同的脚本具有不同的 session.gc_maxlifetime 数值但是共享了同一个地方存储会话数据,则具有最小数值的脚本会清理数据。此情况下,与 session.save_path 一起使用本指令。

也就是说, 如果有俩个应用都没有指定自己独立的save_path, 一个设置了过期时间为2分钟(假设为A), 一个设置为30分钟(假设为B), 那么每次当A的Session gc运行的时候, 就会同时删除属于应用B的Session files.

所以, 第一种答案是不"完全严格"正确的.

第二种答案

还有一种常见的答案是: 设置Session ID的载体, Cookie的过期时间, 也就是session.cookie_lifetime. 这种回答也是不正确的, 原因如下:

这个过期只是Cookie过期, 换个说法这点就考察Cookie和Session的区别, Session过期是服务器过期, 而Cookie过期是客户端(浏览器)来保证的, 即使你设置了Cookie过期, 这个只能保证标准浏览器到期的时候, 不会发送这个Cookie(包含着Session ID), 而如果通过构造请求, 还是可以使用这个Session ID的值.

第三种答案

使用memcache, redis等, okey, 这种答案是一种正确答案. 不过, 很显然出题者肯定还会接着问你, 如果只是使用PHP呢?

第四种答案

当然, 面试不是为了难道你, 而是为了考察思考的周密性. 在这个过程中我会提示出这些陷阱, 所以一般来说, 符合题意的做法是:

1. 设置Cookie过期时间30分钟, 并设置Session的lifetime也为30分钟.

2. 自己为每一个Session值增加Time stamp.

3. 每次访问之前, 判断时间戳.

感谢各位的阅读,以上就是"如何理解PHP中设置一个严格30分钟过期Session的问题"的内容了,经过本文的学习后,相信大家对如何理解PHP中设置一个严格30分钟过期Session的问题这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

时间 答案 问题 也就是 中设 时候 原因 变量 文件 概率 保证 学习 运行 不同 内容 只是 常见 数值 数据 机会 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 瑞斯康达软件开发 青岛海信软件开发有限公司 初级软件开发工程师工资待遇 哪里可以看服务器主机名字 数据库怎么查找隐藏的文件 南宁烟草网络安全设备 mc服务器神秘事件遇上黑暗之眼 软件开发南京工资 央企服务器不能租 delp数据库别名叫什么 服务器怎么做安全加固 工业网络技术哪个适合女生 荣成风云软件开发有限公司 用服务器连接oracle数据库 网络安全预警管理制度 线上购物系统对数据库的要求 幼儿园监控软件开发费用 软件开发业会计分录 艾尔登法环登录服务器要钱吗 长春市互联网 科技企业 我的世界服务器怎么建造职业 湖南省矿权数据库 杭州飞诺网络技术有限公司 无锡联想服务器维修中心电话 有效做好网络安全教育工作 征途单机数据库连接失败 打王者的时候出现一个服务器 茶城销售管理软件开发 图书馆软件开发行业 互联网网络技术咨询信息推荐
0