18.10 Session 缓存、并发与重试

客户端应把 Session 管理封装为进程内/页面内单例:

  1. 有未过期 Session 时直接使用。
  2. 没有 Session 或收到 4605 时,通过同一个进行中的 Promise/Task/Future 执行握手;并发请求等待同一结果,不并发发起多次握手。
  3. 4605 后原请求最多重试一次,并设置仅本地可见的 _encryptionRetried 标志防止循环。
  4. 重试必须基于原始业务参数重新构造请求,生成新的 tsnoncerequest_id、IV 和密文,不能复用旧 e 或旧 body。
  5. 退出登录可清理本地 Session;设备标识、渠道、平台、构建号变化时必须丢弃旧 Session。

不要只根据 HTTP 状态码处理协议错误。当前业务异常通过标准 JSON 的 code/message/data 返回,客户端必须读取响应 JSON 的 code