🌟 需求场景:为什么我们需要“心跳”?
在日常工作中,我们经常需要登录一些对安全要求较高的网站,例如 堡垒机、云平台控制台 或 内网管理系统。这些系统都有一个共同的特性:会话超时机制(Session Timeout)。
如果用户在一定时间内(例如 10 或 15 分钟)没有进行任何操作,系统会认为用户已离开或处于非活动状态,并自动终止会话,强制用户重新登录。这不仅打断工作流程,也让人感到沮丧。
我们的目标: 找到一个简单、快速的解决方案,在不依赖复杂浏览器插件或外部工具的前提下,利用浏览器 控制台(Console) 来运行一段代码,定时向服务器发送请求,模拟用户活跃,从而永久保持会话。
🔑 原理:会话保持与心跳机制
网站判断用户是否活跃,主要依赖于服务器是否收到带有用户 Cookie/会话凭证 的请求。
心跳机制 (Heartbeat) 的原理非常简单:
- 定时器: 在浏览器中设置一个定时器,例如每 5 秒执行一次。
- 发送请求: 定时器触发后,向服务器发送一个轻量级的、无副作用的 GET 请求(例如请求网站的根路径
/)。 - 携带凭证: 这个请求必须携带用户的登录 Cookie。
- 服务器响应: 服务器接收到请求,发现带有有效的 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(); |
发送请求 | 触发心跳。 |
🛑 如何启动与停止?
启动心跳
- 在您已登录的网站页面,按 F12 键或右键选择 “检查”,打开开发者工具。
- 切换到 “Console”(控制台) 标签页。
- 粘贴上述单行代码,并按下 Enter 键执行。
- 控制台会返回一个数字(例如
1),这是定时器的 ID。
停止心跳
由于代码中没有使用变量存储定时器,您必须使用上面记录的 ID 来停止它:
- 在控制台中执行
clearInterval(ID)。
示例: 假设 ID 为 123,则输入:
clearInterval(123);
⚠️ 注意事项
- 浏览器标签页: 运行代码后,请勿关闭或刷新当前标签页,否则代码会停止。
- 权限: 此代码仅在您拥有该网站的当前会话 Cookie 时有效。
- 网络: 确保您的网络连接稳定,否则心跳请求可能会失败。
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://tendcode.com/subject/article/keep-page-Session/
许可协议:署名-非商业性使用 4.0 国际许可协议