DSH Cookie 守护(dsh-cookie-guard)
检测并一键清理 DeepSeek Harness 桌面端累积的 dsh-auth-* 会话 cookie。
系统要求
- Windows 10 / 11(图形界面使用系统自带的 PowerShell 5.1 + WinForms,无需安装额外组件);
- Node.js 22.5 或更高版本(脚本使用内置
node:sqlite,无需npm install); - 运行检测/清理前需完全退出 DSH(Chromium 会独占
Cookies数据库文件)。
背景:为什么需要它
DSH 桌面端每次启动都会:
- 用
--port 0让 Host 监听一个随机端口; - 用
dsh-auth-+sha256(host:port)给浏览器会话 cookie 命名 —— 端口不同,cookie 名就不同; - 给每个 cookie 设 30 天有效期,但从不主动清理;
- 启动欢迎页时通过 Electron
net.fetch(..., { credentials: "include" })把所有历史dsh-auth-*cookie 放进同一个 Cookie 请求头。
Node.js HTTP 默认请求头上限是 16 KiB(16384 字节),单条 cookie 约 200 字节,所以累计 约 71 条后请求头就会超限,Host 返回 HTTP 431,欢迎页报 desktop welcome: Web authentication failed,表现就是 DSH 打不开。
> 说明:问题与账号密码无关。账号凭据只保留 1 条(%USERPROFILE%\.dsh\.credentials.yaml),重新登录会覆盖;真正泄漏的是上面这种会话 cookie。
文件清单
| 文件 | 说明 |
|---|---|
dsh-cookie-guard.mjs |
核心脚本(Node.js 22.5+,使用内置 node:sqlite,无需安装依赖) |
dsh-cookie-guard.cmd |
命令行启动器:双击进入交互界面(检测 / 清理 / 重检 / 打开备份夹) |
dsh-cookie-guard-gui.ps1 |
图形界面(WinForms,Windows 10/11 自带的 PowerShell 5.1 即可运行) |
dsh-cookie-guard-gui.cmd |
图形界面启动器:双击即用 |
README.md |
本说明 |
使用方法
方式一:图形界面(推荐,含「一键清理」按钮)
- 完全退出 DSH:右键托盘图标 → 退出;再打开任务管理器确认没有
DeepSeek Harness.exe进程。
(DSH 运行时会独占CookiesSQLite 文件,任何程序都无法读取,工具会提示你先退出。) - 双击
dsh-cookie-guard-gui.cmd。 - 窗口里会显示:
dsh-auth-*条数、估算 Cookie 请求头占用、还能正常启动几次、状态(安全/注意/危险)。 - 点 「一键清理(先自动备份)」 → 确认 → 完成。
- 重新启动 DSH。它只会重建 1 条新 cookie。
方式二:命令行
# 只检测(0=安全 1=注意/危险 2=读取失败)
node .\dsh-cookie-guard.mjs --check
# 输出 JSON(便于脚本集成)
node .\dsh-cookie-guard.mjs --json
# 清理(默认会先备份;--yes 跳过确认)
node .\dsh-cookie-guard.mjs --clean --yes
也可以双击 dsh-cookie-guard.cmd 使用原始交互界面:[C] 一键清理、[R] 重检、[O] 打开备份文件夹、[Q] 退出。
常用参数
| 参数 | 作用 |
|---|---|
--db <路径> |
指定其它 Cookies 数据库(排查/自测;默认 %APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies) |
--json-out <文件> |
把 JSON 写入文件(图形界面/自动化用) |
--no-backup |
清理时不备份(不建议) |
--keep |
备份保留份数(默认 10) |
--open-backups |
打开备份目录 |
安全说明
- 只删除
name LIKE 'dsh-auth-%'的 cookie,其它 cookie(包括 127.0.0.1 上的普通项)一律不动。 - 每次清理前自动备份到
backups\Cookies-YYYYMMDD-HHmmss.bak,只保留最近 10 组(每组含 1 个.bak及其配套的-journal/-wal/-shm附属文件)。 - 不读取、不上传、不修改账号凭据;不含任何网络请求。
- 清理后重启 DSH 会重建 1 条新 cookie,登录态由原有凭据重新建立,通常无需重新登录。
- 建议定期检查:库文件较大时 30 天过期清理不一定跟得上,条数超过约 55 条就可以清一次。
本工具自身会写什么(残留说明)
本工具只在你主动运行/点击时执行,不常驻后台、不联网、不写注册表、不建自启动项或计划任务。运行后最多留下:
| 位置 | 内容 | 上限 |
|---|---|---|
backups\Cookies-*.bak(及配套 -journal/-wal/-shm) |
清理前的 Cookies 库副本,用于反悔恢复 | 最近 10 组;单份约等于 Cookies 库大小(通常 20 KB~几百 KB),可用 --keep 调整 |
gui-error.log / gui-error.log.1 |
仅图形界面遇到致命错误时的诊断日志 | 每份 256 KB,轮转只保留 1 份 |
%TEMP%\dsh-cookie-guard-*.json |
图形界面与 Node 之间传递结果的临时文件 | 每次用完立即删除 |
除此之外不产生文件;--check/--json 只读不写(--json-out 只写你指定的路径)。备份里是本机 Chromium 加密后的 cookie 值,属本地敏感文件,不需要时可把 backups\ 整个删掉。
工作原理
dsh-cookie-guard.mjs 用 Node 内置的 node:sqlite(只读打开)查询 Cookies 表:
- 统计
host_key = '127.0.0.1'且name LIKE 'dsh-auth-%'的行数、过期情况、加密值长度; - 按
v10加密值长度估算明文长度(约长度 - 31),加 cookie 名、= ;分隔等,估算整条 Cookie 请求头占用; - 输出「估算请求头 / 16,384 字节」的百分比、剩余可正常启动次数与状态;
- 清理模式:先备份,再执行
DELETE ... WHERE name LIKE 'dsh-auth-%'。
已验证
- 构造 70 条
dsh-auth-*+ 2 条普通 cookie 的测试库:检测到 70 条、占用 85%、状态「注意」、剩余约 7 次启动;清理后普通 cookie 保留。 - 真实路径(DSH 运行中):正确提示「DSH 正在运行,Cookie 库被独占,无法读取」,不会误报、不会破坏数据。
- 图形界面自检:
powershell -NoProfile -ExecutionPolicy Bypass -STA -File .\dsh-cookie-guard-gui.ps1 -SelfTest返回 0。
排错
- 若图形界面报错,查看同目录
gui-error.log。 - 若提示「无法判断 DSH 进程」,不影响清理;只要任务管理器里没有
DeepSeek Harness.exe即可。 - 若清理后仍打不开:再检查一次条数;仍有异常可在完全退出 DSH 后用备份恢复
backups\里的.bak文件(复制回Network\Cookies)。
免责声明
- 本项目是个人编写的第三方小工具,与 DeepSeek 官方无关。
- 清理操作只针对
dsh-auth-*会话 cookie,并在动手前自动备份;但仍建议你先确认backups\里已生成备份再重启 DSH。 - 使用前请自行确认 DSH 已完全退出;不要把
backups\、gui-error.log或任何Cookies数据库文件提交到公开仓库(.gitignore已排除)。
许可证
MIT —— 可自由使用、修改、分发,保留版权声明即可。