要维持会话特定的时间并在之后终止它,建议实现自定义会话超时。这种方法比依赖 session.gc_maxlifetime 或 session.cookie_lifetime 等会话设置更可靠。
1。 session.gc_maxlifetime:
session.gc_maxlifetime 确定会话数据被视为“垃圾”并被删除的时间量。然而,垃圾收集偶尔发生,使其成为一种不可靠的会话过期方法。
2. session.cookie_lifetime:
session.cookie_lifetime 仅影响发送到浏览器的 cookie 的生命周期,而不影响会话本身。服务器负责使会话无效,而不是客户端。
推荐解决方案:
通过维护跟踪上次活动时间的时间戳来实现自定义会话超时。每次请求时更新此时间戳。
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
此方法有效地使会话数据在 30 分钟的活动后过期,并防止垃圾收集器过早删除。
为了增强安全性,请考虑定期重新生成用于防止会话固定的会话 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中文网其他相关文章!