简体中文 | English
SessionKeeper 是一个仅支持 Chrome 的 Manifest V3 扩展。它通过真实的后台页面访问行为,定期访问浏览器中已经打开的网站,帮助延续现有登录会话。
扩展不依赖网站 API,不分析业务接口,不注入页面脚本,也不读取网页内容。所有配置、运行状态和日志都只保存在本机 Chrome 中。
点击缩略图可查看完整截图。
| 控制台 | 设置 | 日志 |
|---|---|---|
| 启停、立即执行与运行状态 | 频率、并发和域名规则 | 最近 100 条执行记录 |
- 自动扫描浏览器中已打开的 HTTP/HTTPS 网站
- 从页面 URL 提取 origin,并按域名去重
- 使用不激活的后台 Tab 访问网站,不切换当前页面
- 页面加载完成后继续等待一段时间,让网站脚本完成会话刷新
- 支持定时执行和手动立即执行
- 支持立即停止全部任务并取消后续定时
- 支持配置 1–10 个并行后台 Tab,默认并发数为 3
- 支持黑名单和白名单模式
- 页面加载超过 30 秒自动失败,不阻断后续任务
- 本地保存最近 100 条运行日志
- 适配 Manifest V3 Service Worker 休眠和恢复
- 启停、设置和日志全部集中在插件弹窗内
- 设置自动保存,无需寻找或点击保存按钮
打开“自动保活”后,SessionKeeper 只会创建定时计划,不会立即访问网站。经过一个完整的执行间隔后,才会开始第一轮任务。
例如执行间隔为 10 分钟,在 12:00 启用后,第一轮将在约 12:10 开始,后续继续按 10 分钟执行。
点击“立即保活”会马上开始一轮任务,并从点击时刻重新计算下一次定时执行时间。
例如执行间隔为 10 分钟,在 12:04 点击“立即保活”,本轮会立即执行,下一轮将在约 12:14 开始。
任务运行时,“立即保活”按钮会变成“停止全部”。点击后会立即:
- 清空尚未执行的任务队列。
- 关闭 SessionKeeper 当前创建的全部后台 Tab。
- 取消后续定时任务。
- 将自动保活切换为停用状态。
SessionKeeper 只会关闭自己创建的任务 Tab,不会关闭用户原本打开的页面。
-
扫描当前打开的正常网页 Tab。
-
忽略空 URL、非法 URL 和非 HTTP/HTTPS 页面。
-
提取页面的 origin。例如,输入地址:
https://gitlab.example.com/project/demo转换为:
https://gitlab.example.com -
按域名去重,并应用黑名单、白名单规则。
-
根据并发配置创建不激活的后台 Tab。
-
等待页面加载完成。
-
继续等待配置的页面等待时间,默认 10 秒。
-
关闭任务 Tab,并记录执行结果。
页面加载超过 30 秒、导航失败、URL 非法或 Tab 创建失败时,该任务会记录为失败,队列中的其他任务继续执行。
| 配置 | 默认值 | 范围或规则 | 说明 |
|---|---|---|---|
| 自动保活 | 启用 | 开启 / 停用 | 启用后等待一个完整间隔再执行 |
| 执行间隔 | 10 分钟 | 1–1440 分钟 | 每轮任务的定时频率 |
| 页面加载后等待 | 10 秒 | 0–300 秒 | 给网站脚本预留会话刷新时间 |
| 并行后台页面 | 3 个 | 1–10 个 | 同时运行的任务 Tab 上限 |
| 黑名单 | 空 | 每行一个域名 | 匹配域名及其所有子域名 |
| 白名单模式 | 关闭 | 开启 / 关闭 | 开启后只访问白名单中的域名 |
| 白名单 | 空 | 每行一个域名 | 仅在白名单模式开启时生效 |
黑名单优先于白名单。规则 example.com 会同时匹配 example.com、www.example.com 和 jira.example.com。
- 数字配置和白名单模式开关变更后立即保存。
- 黑名单、白名单停止输入约 400 毫秒后自动保存。
- 设置页顶部会显示“等待自动保存”“正在自动保存”“已自动保存”或错误原因。
- 输入超出允许范围时不会覆盖已有配置。
- 连续修改会按顺序保存,避免较早的请求覆盖最新值。
下载本项目源码并解压到一个固定目录。请不要在加载扩展后移动或删除该目录,否则 Chrome 将无法继续加载插件。
确认所选择的目录中可以直接看到 manifest.json,目录结构应类似:
SessionKeeper/
├── manifest.json
├── background/
├── popup/
└── utils/
- 在 Chrome 地址栏输入 chrome://extensions 并回车。
- 打开页面右上角的“开发者模式”。
- 点击左上角的“加载已解压的扩展程序”(Load unpacked)。
- 选择上一步中的 SessionKeeper 根目录,也就是包含 manifest.json 的目录。
- 页面出现 SessionKeeper 扩展卡片即表示安装成功。
- 点击 Chrome 工具栏右侧的“扩展程序”拼图图标。
- 在列表中找到 SessionKeeper。
- 点击旁边的固定图标,将 SessionKeeper 显示在工具栏上。
- 点击 SessionKeeper 图标即可打开控制面板。
- 打开插件后切换到“设置”页。
- 设置执行间隔、页面加载后等待时间和并行后台页面数量。
- 根据需要填写黑名单,或开启白名单模式并填写允许保活的域名。
- 所有配置都会自动保存。看到“已自动保存”后即可关闭弹窗,无需点击保存按钮。
域名规则每行填写一个,例如:
gitlab.example.com
jira.example.com
回到“控制台”页,打开“自动保活”开关。插件会建立定时计划,并在经过一个完整的执行间隔后开始第一轮任务。
如果希望现在就执行一次,点击“立即保活”。本轮会马上开始,下一轮将从本次点击时间起按配置的间隔执行。
执行过程中可以关闭插件弹窗,后台任务不会因此中断。
任务执行时,底部按钮会显示“停止全部”。点击后会立即关闭插件创建的任务 Tab、清空等待队列、取消后续定时并停用自动保活。
如果当前没有任务正在执行,直接关闭“自动保活”开关也会取消后续定时任务。
打开插件并切换到“日志”页,可以查看最近 100 条运行记录,包括网站域名、执行时间、结果、耗时和失败原因。
替换或修改项目文件后,打开 chrome://extensions,在 SessionKeeper 扩展卡片上点击“重新加载”。重新加载不会主动删除已经保存在 Chrome 中的设置和日志。
SessionKeeper 不会:
- 上传或向第三方发送用户数据
- 读取网页正文或修改网页 DOM
- 注入 Content Script
- 读取密码、Cookie、表单或页面中的敏感信息
- 分析网站 API、业务接口或鉴权逻辑
- 将日志同步到网络
扩展只创建真实的 Chrome 页面访问行为。配置和日志存储在 chrome.storage.local 中。
弹窗“日志”页展示最近 100 条记录,包括执行时间、网站域名、成功或失败结果、任务耗时和失败原因。
停止全部时,正在运行的任务会以“用户停止本轮任务”记录为失败,便于区分正常成功和主动中断。
SessionKeeper/
├── manifest.json
├── background/
│ └── service-worker.js
├── popup/
│ ├── popup.html
│ ├── popup.js
│ └── popup.css
├── utils/
│ └── storage.js
├── assets/
│ ├── sessionkeeper-control.png
│ ├── sessionkeeper-settings.png
│ ├── sessionkeeper-logs.png
│ └── thumbnails/
├── README.md
└── README_EN.md
项目仅使用 JavaScript、HTML、CSS 和 Chrome 官方 Extension API,没有第三方运行时依赖。
- SessionKeeper 只能帮助触发网站自身已有的会话刷新机制,无法保证所有网站永久保持登录。
- 服务端主动吊销会话、修改密码、强制重新登录或会话达到绝对有效期时,仍需用户重新登录。
- 依赖用户手势、前台焦点、验证码或特殊浏览器策略的网站,可能无法通过后台访问刷新会话。
- Chrome 可能根据系统节能策略延迟后台定时任务,因此执行时间可能存在少量偏差。
- 建议仅对白名单中的工作网站启用保活,并设置合理的执行间隔。
这是预期行为。启用只建立定时计划,第一轮会在一个完整执行间隔后开始。如需马上执行,请点击“立即保活”。
不会。“停止全部”会取消主定时任务并停用自动保活。再次打开自动保活前,不会启动新一轮任务。
请依次检查:
- 对应网站是否仍有 HTTP/HTTPS 页面处于打开状态。
- 域名是否被黑名单匹配。
- 白名单模式是否开启,以及域名是否在白名单中。
- 设置页顶部是否显示“已自动保存”。
页面在 30 秒内没有完成主页面加载。可能原因包括网络不可用、代理问题、证书错误、网站服务异常或页面持续重定向。失败不会阻断其他任务。
