首页 > 后端开发 > php教程 > 如何在 30 分钟不活动后有效地使 PHP 会话过期?

如何在 30 分钟不活动后有效地使 PHP 会话过期?

Mary-Kate Olsen
发布: 2024-12-23 11:23:12
原创
743 人浏览过

How Can I Effectively Expire a PHP Session After 30 Minutes of Inactivity?

PHP 会话在 30 分钟后过期

要维持会话特定的时间并在之后终止它,建议实现自定义会话超时。这种方法比依赖 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
}
登录后复制

注释:

  1. 将 session.gc_maxlifetime 设置为至少与自定义过期处理程序一样长。
  2. 对于基于活动而不是会话开始的会话过期,请使用 setcookie 将 cookie 过期时间设置为 30分钟。

以上是如何在 30 分钟不活动后有效地使 PHP 会话过期?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板