2020-07-23 11:45:26
在 PHP 中设置 Session 的过期时间可以通过以下三种方法实现,每种方法适用于不同场景,具体操作如下:
方法 1:通过 ini_set() 设置会话垃圾回收周期此设置仅影响服务器端 Session 文件的清理周期,不直接影响客户端 Cookie 的过期时间。
需在 session_start() 前调用,否则可能不生效。
实际过期时间可能受服务器配置(如 session.gc_probability)影响。
$expire:过期时间戳(如 time() + 1800)。
$path:Cookie 的有效路径(/ 表示全站)。
$secure:是否仅通过 HTTPS 传输。
$httponly:是否禁止 JavaScript 访问 Cookie(增强安全性)。
必须在 session_start() 前调用。
此方法仅影响客户端 Cookie,服务器端 Session 文件可能仍按 gc_maxlifetime 清理。
需要基于用户活动(如最后操作时间)动态判断过期。
可结合其他方法实现双重过期控制(服务器+客户端)。
安全性:
始终启用 httponly 和 secure 标志(HTTPS 下)防止 XSS 和窃取。
敏感操作应重新验证用户身份,而非依赖 Session 过期。
服务器配置:
检查 php.ini 中的 session.gc_maxlifetime 默认值,确保其不短于预期设置。
分布式服务器需统一 Session 存储路径(如 Redis)避免清理不同步。
测试方法:
修改系统时间或使用工具(如浏览器开发者工具)观察 Cookie 的 Expires 字段。
通过以上方法,可灵活控制 PHP Session 的生命周期,平衡安全性与用户体验。