求助:如何防止因无操作导致的Session超时?学生用户遇登录失效问题
解决网站自动登出的Tampermonkey脚本方案
由于通用保活扩展无效,你可以针对目标网站的会话机制,用Tampermonkey写定制脚本,以下是两种可行方案:
方案1:模拟网站心跳请求(优先推荐)
大部分网站会通过定时发送"心跳"请求维持会话,你可以直接复刻这个请求:
步骤1:找到网站的心跳请求
- 打开目标网站,按
F12打开开发者工具,切换到Network标签 - 保持页面不动,等待5-10分钟,观察是否有重复发送的请求(通常URL包含
heartbeat、ping、refresh、session等关键词) - 点击该请求,查看它的请求方法(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ø
相关产品推荐
相关产品推荐

