如何修改现有PHP代码实现页面5分钟无操作自动断开连接
5分钟无操作自动断开连接实现方案
后端PHP代码修改
原有逻辑保留,新增会话活动时间校验规则,修改后完整代码如下,这段代码需要放在所有需要登录校验的页面最顶部:
<?php // 先开启会话,必须放在逻辑最开头 session_start(); // 5分钟等于300秒,可自行调整阈值 $expire_threshold = 300; // 自动断开逻辑:校验最后活动时间 if (isset($_SESSION['last_activity'])) { $idle_time = time() - $_SESSION['last_activity']; if ($idle_time > $expire_threshold) { // 超时销毁会话,走原有断开逻辑 session_destroy(); header('Location: ./index.php'); exit(); } } // 每次页面请求/操作都更新最后活动时间 $_SESSION['last_activity'] = time(); // 原有手动断开逻辑保留 if(isset($_GET['action'])){ if($_GET['action'] == 'disconnect'){ session_destroy(); header('Location: ./index.php'); exit(); } } ?>
补充:前端无交互主动检测(可选)
如果用户停留在当前页面长期不刷新,后端无法感知用户状态,可新增前端JS逻辑,监听用户的鼠标移动、键盘输入、点击等操作,超时后主动触发断开请求:
// 超时时间5分钟,单位毫秒 const idleTime = 5 * 60 * 1000; let idleTimer; // 重置计时器 function resetIdleTimer() { clearTimeout(idleTimer); idleTimer = setTimeout(() => { // 超时触发断开请求 window.location.href = '?action=disconnect'; }, idleTime); } // 监听用户操作事件 document.addEventListener('mousemove', resetIdleTimer); document.addEventListener('keydown', resetIdleTimer); document.addEventListener('click', resetIdleTimer); document.addEventListener('scroll', resetIdleTimer); // 页面加载时初始化计时器 resetIdleTimer();
注意事项
- 需要确保PHP配置项
session.gc_maxlifetime的值大于等于300,避免PHP自动回收会话导致逻辑异常 - 如果站点使用AJAX异步交互,需要在每个AJAX请求的后端处理逻辑中也更新
$_SESSION['last_activity']的时间
内容的提问来源于stack exchange,提问作者Jérôme DE PORRES
相关产品推荐
相关产品推荐

