You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改现有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:24:02