diff --git a/docs/HUYA_CHAT_缺失字段补齐方案.md b/docs/HUYA_CHAT_缺失字段补齐方案.md index 65a9045..bc04870 100644 --- a/docs/HUYA_CHAT_缺失字段补齐方案.md +++ b/docs/HUYA_CHAT_缺失字段补齐方案.md @@ -149,4 +149,42 @@ isRole),RPC 往返全部正常;604 是账号真实积分状态(历史兑 1. `guid/_qimei_uuid42/__yamid_new/game_did` 的**真实性/关联性**服务端是否校验未知; 必须用生成值跑通线上活动 WSS 全链路才能定论,不能只过长度测试。 2. 统计字段随机值不影响接口语义,但**顺序**建议与 9.1 cookie 保持一致以便对照。 -3. 补齐后仍需**新鲜的 udb 登录态**(905 = 过期),登录链路见 `app_login.py`。 \ No newline at end of file +3. 补齐后仍需**新鲜的 udb 登录态**(905 = 过期),登录链路见 `app_login.py`。 +## 九、浏览器注入 ck 未登录的根因(2026-09-01 晚实测确认) + +现象:把 App 扫码登录产出的 41 字段网页 ck 注入浏览器,打开 www.huya.com 顶部仍显示 +"登录"按钮(未登录)。 + +排查过程(CDP 有头 Chrome 实测): + +1. ck 本身有效:curl 带该 ck 请求 + `l.huya.com/udb_web/udbport2.php?m=HuyaLogin&do=checkLogin` 返回 + `{"isLogined":true,"userName":"hy_300539756","uid":"1199667330433",...}`; + 8.31 真实扫码登录抓包的 checkLogin 成功值与 verify data:null 均一致。 + 注意:`user.huya.com/liveHttpUI/checkUserTimeIsLogin` 的 `iIsLogin:0` 不判定 + 登录态 —— 真实网页 ck 抓包同样为 0,可排除。 +2. `web/cookie/verify` 的 `data:null` 也是正常成功形态,非未登录信号。 +3. document.cookie 检查发现:注入后页面里只有设备字段(guid 等)、没有 + udb_uid/udb_cred/udb_biztoken/yyuid —— 登录凭据没有被 www.huya.com 子域携带。 + +**根因:Network.setCookie 的 domain 参数不能写 `huya.com`,必须写 `.huya.com` +(带前导点)。** + +- `domain="huya.com"`(无前导点)→ Chrome 存为 **host-only cookie**,只有精确访问 + `huya.com` 时才发送;`www.huya.com` / `l.huya.com` / `udblgn.huya.com` / + `user.huya.com` 等**所有子域都不会携带** → 页面意义上的登录判定失败。 +- `domain=".huya.com"`(带前导点)→ 存为 **domain cookie**,huya.com 及其全部子域 + 都携带。实测注入后 `document.cookie` 含全部字段,顶部导航"登录"按钮消失、 + 出现登录用户专属项(如"关注")。 + +正确注入姿势(CDP): + +```json +{"method":"Network.setCookie","params":{ + "name":"udb_uid","value":"1199667330433","domain":".huya.com", + "path":"/","secure":false,"httpOnly":false}} +``` + +手工用浏览器插件/DevTools 注入时同样注意:Domain 填 `.huya.com`(用户输入时 Chrome +会规范化为前导点形式;若插件按 host-only 保存则无效)。HttpOnly 无需设置 —— +uzb_* 登录凭据在真实网页中可由脚本读取,非 HttpOnly。