Repository navigation
Desktop 启动崩溃:本地认证 cookie 按端口堆积,约 70 条后撑爆请求头(附最小修复补丁) #11408
Replies: 5 comments
|
补一条说明,免得行号误导。 正文里的
另外,这段改动应当走源码、重新构建发布。我本地图快,直接往 |
|
你三条事实我都在源码里核到了,补一个细节和一处提醒。
补丁位置是对的: 提醒一句:清 cookie 是 workaround,不是修法——它每次启动都清空所有 你踩的 asar pickle 对齐坑(数据区起点是 只读了源码( |
|
补充一个独立的 Windows +
结论与 #11408 一致:cookie 名 = 前缀 + |
|
更正我上一条回复里的一句话。 我写过"真正的修法两半:名字不带端口 + 清理兄弟条目"。前半句是错的。
这直接影响我上一条的结论:浏览器里同名 cookie 只能留一条,所以"名字不带端口"会让两个端口互相顶掉,每次切换端口都要重新认证 —— 那不是免费改动,而且会打掉一个现有能力。 修正后的说法:最小修法是写入时清理同族旧名(签发新 cookie 之后,把其它 @sphuang1030-prog 补充的 71 条 / 16,186 B 与这个结论一致:跨过 16 KiB 之后,每次启动都会失败。 |
|
【macOS arm64 + 0.2.1-rc.5 实测:71 条 / 16,117 B;另报一个次生缺陷】
环境:macOS arm64、@deepseek-ai/dsh-desktop 0.2.1-rc.5、Electron 44.7.0 / Node 24.21.0。 症状:连续启动失败, 实测(删除前按原路径备份 Cookies,只读查询): SELECT COUNT(*), SUM(LENGTH(name)+LENGTH(value)+2) FROM cookies WHERE name LIKE 'dsh-auth-%';
-- 71 | 1611771 条全部挂在 127.0.0.1,合计已到 16 KiB 上限附近;与 #11408 / #11555 / #11590 的结论一致。 恢复:退出应用 → 备份并移除 Cookies / Local Storage / Session Storage → 重开,回到欢迎页重选工作区即恢复; 次生缺陷(与本帖根因无关,建议单独看): 建议:欢迎请求收到 431 时自动识别为 cookie 超限并清理 |
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dsh-desktop0.2.1-rc.3(推测其他版本同样存在)现象
启动阶段直接崩溃弹窗:
崩溃日志:
弹窗里的「禁用第三方插件并重启」无效,排除插件因素;
%APPDATA%不动,所以覆盖安装、重装都无效。根因
三个事实叠在一起:
Desktop 启动 Host 时把端口写死成随机端口——
dsh-desktop-host/lib/index.js:浏览器认证 cookie 的名字由 host:port 推导,
dsh-client-connection/lib/index.js:默认有效期
cookieMaxAgeDays: 30。端口每次都变,于是每次启动都新增一条 cookie(127.0.0.1、Path=/、30 天),没有任何地方回收它。lib/main.js里欢迎页握手用 Electron 的net.fetch并credentials: "include":Chromium 会把所有 domain+path 匹配的 cookie 一并塞进 Cookie 头。约 70 条时总长度超过 Node 默认 16 KiB 的请求头上限,Host 返回 431,
response.ok为 false,于是抛出上面那个错误:实测崩溃时
Network/Cookies里有 71 条host_key = '127.0.0.1'且name LIKE 'dsh-auth-%'的记录。值得注意:前面的
authenticateWebHost()用的是 Node 原生fetch(不带 cookie jar),所以它总是成功;只有走 Chromium cookie jar 的欢迎页握手会挂——这跟崩溃点每次都在connectDesktopWelcome完全吻合。复现
连续启动 70 次左右即可(正常重启、自动更新重启都算)。期间不需要做任何别的操作。
已验证的临时修复
彻底退出 DSH 后执行:
(对
%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies,用 DB Browser for SQLite 打开,记得点「写入更改」。)重启后会自动重新认证,用户数据不丢。建议修复
最小补丁:在欢迎页握手之前清空 cookie 桶,
lib/main.js第 12196 行那次connectDesktopWelcome之前插入一行:重启后第一次请求会重新签发 cookie,所以这一行没有副作用;
storages: ["cookies"]只清 cookie,localStorage / IndexedDB /dsh-platform-*分区都不受影响。这样 cookie 桶里永远只有本次启动的一条,堆积问题从结构上消失。其余可选改进,按性价比排序:
dsh-auth-*。比清空更保守,适合不想动 cookie 的场合。Web authentication failed。Network目录的选项,避免历史数据干扰新版本。影响面
这个故障对普通用户来说表现是「装坏了、打不开、重装也没用」,没有任何自救路径,只能等的客服或者删配置文件。而触发条件只是「用得久、重启得多」,不需要做错任何事。
All reactions