如何在 30 分钟后有效地使 PHP 会话过期
虽然 PHP 提供了 session.gc_maxlifetime 和 session.cookie_lifetime 等选项用于会话过期,它们并不完全可靠。这是实现您自己的会话超时机制的综合方法。
PHP 内置选项的问题:
实现自定义会话超时:
使会话过期的最有效方法session 在特定时间段不活动后是为了实现您自己的超时机制。这涉及维护最后一个活动(请求)的时间戳并根据每个请求更新它。如果上次活动超过 30 分钟前,您可以取消设置并销毁会话。
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) { // last request was more than 30 minutes ago session_unset(); // unset $_SESSION variable for the run-time session_destroy(); // destroy session data in storage } $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
通过不断更新会话数据,可以防止垃圾收集器过早删除会话文件的修改日期。
额外安全措施:
防止会话等攻击固定,您可以通过更新 $_SESSION['CREATED'] 时间戳定期重新生成会话 ID:
if (!isset($_SESSION['CREATED'])) { $_SESSION['CREATED'] = time(); } else if (time() - $_SESSION['CREATED'] > 1800) { // session started more than 30 minutes ago session_regenerate_id(true); // change session ID for the current session and invalidate old session ID $_SESSION['CREATED'] = time(); // update creation time }
注意:
以上是如何在 30 分钟不活动后可靠地使 PHP 会话过期?的详细内容。更多信息请关注PHP中文网其他相关文章!