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

求助:如何防止因无操作导致的Session超时?学生用户遇登录失效问题

解决网站自动登出的Tampermonkey脚本方案

由于通用保活扩展无效,你可以针对目标网站的会话机制,用Tampermonkey写定制脚本,以下是两种可行方案:

方案1:模拟网站心跳请求(优先推荐)

大部分网站会通过定时发送"心跳"请求维持会话,你可以直接复刻这个请求:

步骤1:找到网站的心跳请求

  1. 打开目标网站,按F12打开开发者工具,切换到Network标签
  2. 保持页面不动,等待5-10分钟,观察是否有重复发送的请求(通常URL包含heartbeat、ping、refresh、session等关键词)
  3. 点击该请求,查看它的请求方法(GET/POST)、URL、请求头(尤其是Cookie)和请求参数(如果是POST)

步骤2:编写心跳脚本

将以下代码复制到Tampermonkey新脚本中,替换对应内容:

// ==UserScript==
// @name         网站会话保活脚本
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  定时发送心跳请求防止自动登出
// @author       你自己的名字
// @match        https://你的目标网站域名/*
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // 定时间隔设为比网站登出时间短,比如25分钟(单位:毫秒)
    const keepAliveInterval = 25 * 60 * 1000;

    function sendHeartbeat() {
        // 替换成你找到的心跳请求URL
        const heartbeatUrl = "https://目标网站域名/api/heartbeat";
        
        GM_xmlhttpRequest({
            method: "GET", // 改成实际请求方法(GET/POST)
            url: heartbeatUrl,
            // 如果是POST请求,添加data参数,比如 data: "session_id=xxx",复制实际请求的Form Data
            // data: "",
            headers: {
                // 复制实际请求中必要的请求头,至少保留Cookie和User-Agent
                "Cookie": document.cookie,
                "User-Agent": navigator.userAgent
            },
            onload: res => console.log("心跳请求成功,状态码:", res.status),
            onerror: err => console.error("心跳请求失败:", err)
        });
    }

    // 立即执行一次,之后定时循环
    sendHeartbeat();
    setInterval(sendHeartbeat, keepAliveInterval);
})();

方案2:模拟用户操作(备用)

如果找不到心跳请求,就模拟微小的用户操作来欺骗网站的无活动检测:

// ==UserScript==
// @name         模拟操作保活脚本
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  定时模拟微小操作防止自动登出
// @author       你自己的名字
// @match        https://你的目标网站域名/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const keepAliveInterval = 25 * 60 * 1000;

    function simulateAction() {
        // 方案1:微小滚动页面(无视觉干扰)
        window.scrollBy(0, 5);
        setTimeout(() => window.scrollBy(0, -5), 100);

        // 方案2:模拟鼠标移动(可选,增强效果)
        const mouseMoveEvent = new MouseEvent('mousemove', {
            bubbles: true,
            clientX: Math.random() * window.innerWidth,
            clientY: Math.random() * window.innerHeight
        });
        document.dispatchEvent(mouseMoveEvent);

        console.log("已执行保活操作");
    }

    simulateAction();
    setInterval(simulateAction, keepAliveInterval);
})();

注意事项

  • 务必替换@match中的域名,确保脚本只在目标网站运行
  • 定时间隔要小于网站的自动登出时间(比如网站30分钟登出,设25分钟)
  • 如果用心跳请求,必须复制完整的必要请求头,Cookie是维持会话的核心
  • 若脚本仍无效,检查网站是否有更严格的检测(比如验证操作来源),可以尝试结合多种模拟操作

内容的提问来源于stack exchange,提问作者Emil Thorsø

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:31:06