🌟 需求场景:为什么我们需要“心跳”?

在日常工作中,我们经常需要登录一些对安全要求较高的网站,例如 堡垒机、云平台控制台内网管理系统。这些系统都有一个共同的特性:会话超时机制(Session Timeout)。

如果用户在一定时间内(例如 10 或 15 分钟)没有进行任何操作,系统会认为用户已离开或处于非活动状态,并自动终止会话,强制用户重新登录。这不仅打断工作流程,也让人感到沮丧。

我们的目标: 找到一个简单、快速的解决方案,在不依赖复杂浏览器插件或外部工具的前提下,利用浏览器 控制台(Console) 来运行一段代码,定时向服务器发送请求,模拟用户活跃,从而永久保持会话。


🔑 原理:会话保持与心跳机制

网站判断用户是否活跃,主要依赖于服务器是否收到带有用户 Cookie/会话凭证 的请求。

心跳机制 (Heartbeat) 的原理非常简单:

  1. 定时器: 在浏览器中设置一个定时器,例如每 5 秒执行一次。
  2. 发送请求: 定时器触发后,向服务器发送一个轻量级的、无副作用的 GET 请求(例如请求网站的根路径 /)。
  3. 携带凭证: 这个请求必须携带用户的登录 Cookie。
  4. 服务器响应: 服务器接收到请求,发现带有有效的 Cookie,便会 重置 用户的会话计时器,从而避免超时。

🛠️ 最终方案:简洁高效的 XHR 心跳

为了追求代码的 最短、最稳定、不使用变量,并确保 成功执行后有反馈,我们选择使用 XMLHttpRequest (XHR) 对象来实现心跳。

1. 核心代码(单行版)

将以下 单行代码 粘贴到您的浏览器 控制台(Console) 中执行:

setInterval(() => {var x=new XMLHttpRequest(); x.open('GET', '/', true); x.withCredentials=true; x.onload=() => console.log('心跳成功'); x.send();}, 5000);

2. 代码解析

代码片段 作用 关键说明
5000 间隔时间 5000 毫秒 (5 秒),您可以根据需求调整,但要小于网站的超时时间。
var x=new XMLHttpRequest(); 创建请求 使用 XHR 对象,它在控制台环境中比 fetch 更稳定。
x.open('GET', '/', true); 配置请求 设置为 GET 请求,目标是网站根路径 (/)。
x.withCredentials=true; 保持会话 关键设置,确保请求携带您的登录 Cookie
x.onload=() => console.log('心跳成功'); 成功反馈 请求成功完成(加载)后,在控制台打印提示信息。
x.send(); 发送请求 触发心跳。

🛑 如何启动与停止?

启动心跳

  1. 在您已登录的网站页面,按 F12 键或右键选择 “检查”,打开开发者工具。
  2. 切换到 “Console”(控制台) 标签页。
  3. 粘贴上述单行代码,并按下 Enter 键执行。
  4. 控制台会返回一个数字(例如 1),这是定时器的 ID

停止心跳

由于代码中没有使用变量存储定时器,您必须使用上面记录的 ID 来停止它:

  1. 在控制台中执行 clearInterval(ID)

示例: 假设 ID 为 123,则输入:

clearInterval(123);

⚠️ 注意事项

  • 浏览器标签页: 运行代码后,请勿关闭或刷新当前标签页,否则代码会停止。
  • 权限: 此代码仅在您拥有该网站的当前会话 Cookie 时有效。
  • 网络: 确保您的网络连接稳定,否则心跳请求可能会失败。