admin-session-stability-2026-10-16.md 2.1 KB

管理后台操作中自动退出:第二轮修复(2026-10-16)

用户再次确认:正在操作时突然回到登录页。未取得该次失败请求的网络记录,因此以下是已复现的代码缺陷,不将其直接等同于用户当次退出的唯一原因。

现场与复现

  • 正式站 https://admin.xiaoshu.pro 版本为 3bf81740cc1ceca68b74da52bb8ba7baddc61fa7。实际下载的 JavaScript 包含上次添加的会话复核,同时仍包含普通 HTTP 401 清除登录、直接使用 storage 事件旧值的逻辑。
  • 使用现有配置的运营会话只读请求 Parse /sessions/me,HTTP 200;创建时间 2026-09-09,到期时间 2027-09-09。只证明这条抽查会话有效,不代表受影响用户会话均有效。
  • 新增回归用例,在修改实现前运行:17 项中 5 项失败。复现了普通 401 误退出、非用户结构的成功响应误退出、旧请求清除另一标签页的新登录、排队的旧退出事件覆盖新登录,以及迟到的身份响应将旧登录写回共享存储。

修复

  • Parse 复核只有 HTTP 400/401 且明确返回错误码 209 才判定 token 失效。单独的 HTTP 401、网络故障、异常响应结构保留登录,业务请求仍返回错误且不会自动重复写操作。
  • 读取到真实用户对象后仍核对账号一致性、停用和删除状态;有效的安全退出行为保留。
  • storage 通知到达时读取当前共享状态,避免重放排队中的旧登录/退出值;检查失败和清除会话之前同样核对共享状态。
  • 身份信息落盘前同步共享登录,避免迟到响应覆盖其他标签页的新登录。
  • 本地持久存储写入失败时保持标签页内会话可用,不因共享存储为空强迫退出。

验证

  • ChromeHeadless 定向回归 36 项通过:会话服务、云请求、登录页、路由缓存、实时刷新。
  • npm run build:admin 通过;仅已有样式预算和 CommonJS 警告。
  • git diff --check 通过。
  • 发布结果另行追加;本节不将本地验证等同于正式部署,也不声称已完成受影响用户环境的持续使用验收。