Files
new-api-key-usage/docs/design/sessions表字段设计.md
skycurtain e4d25526f3 docs: 设计阶段定稿——需求清单(15 项全定案)与七篇表设计定稿
- 需求清单:独立计费平台定位,R1-R15 全部定案(12 项裁决 + R10 裁撤 + R3/R4 延后),裁决档案含访问主体模型(作者登录体系 + 成员长期令牌)、分摊哲学(平台不做价值判断只提供事实服务)、双形态交付(完整前后端先行,CFW 抽取版后续)
- 数据模型定稿(一表一文档):api_keys(16 列,401 状态机裁撤——引擎记录不决策)/ usage_logs(25 列,billing_source 与 subscription_id 提列,非消费行去重含 content 指纹)/ payments(币种无关支付记录,只存事实)/ qpu_history(按日志时刻取值)/ members(成员实体与长期令牌)/ users(空库双通道初始化与重置)/ sessions(服务端会话,否决 JWT)
- 接口参考:NewAPI-接口范围融合字段级实证,定位 docs/references/(计费平台可用接口参考,唯一上游参考)
- README / AGENTS:新版设计语境(项目沿革、重开设计动因、协作约定、文档自立原则)
2026-10-01 14:54:06 +08:00

3.3 KiB
Raw Permalink Blame History

sessions 表字段设计

数据模型新增表之三:管理面会话——HttpOnly cookie 里的令牌与服务端状态的对应物。裁决背景见 docs/design/需求清单.md §9「访问主体模型」。

项目 内容
状态 定稿(2026-10-01)
关联 docs/design/users表字段设计.md(user_id 指向)· docs/design/需求清单.md §9
范围 列结构 + 语义 + 写入时机;cookie 参数(SameSite 等)归技术稿;方言映射归数据访问层设计
字段数 5 = 1 主键 + 4 业务字段

1. 表定位

  • 一行 = 一次活跃登录——登录成功 INSERT,登出 / 过期 DELETE
  • 浏览器侧只持有令牌明文(HttpOnly cookie),服务端只存哈希
  • 唯一服务对象是管理面(作者)登录——user_id 指向单行的 users 表;成员链路不经此表(成员凭证是 members.token_hash 长期令牌,无会话语义,辨析见 members表字段设计.md 3.2)

2. 字段清单

列 类型 值来源 说明
id bigserial PK 自增
user_id bigint FK 登录成功时 → users.id
token_hash text UNIQUE 登录成功时 会话令牌(随机 256bit)的哈希——cookie 存明文、库存哈希
expires_at timestamptz 登录成功时 过期时间(如 7 天);过期即拒绝
created_at timestamptz 登录成功时

3. 决策记录(含理由)

3.1 服务端会话(查库校验),明确否决 JWT

  • JWT 的问题域我们没有:JWT(无状态令牌)的收益在多服务共享认证、水平扩展免共享存储、海量会话——本项目是单后端、单实例、单管理员,收益一项不占,负担全额缴纳
  • 不可吊销是致命伤:JWT 签发后、过期前无法作废——登出仅是客户端删 cookie(令牌仍有效)、踢下线做不到、改密后旧会话无法失效;业界绕法「短过期 + refresh token」需要服务端存储 refresh token,绕回有状态,JWT 的唯一优势随之蒸发
  • 多一个要管理的秘密:签名密钥的保管、轮换、泄露处置,凭空多一项运维(CFW 形态下多一处 secret 配置)
  • 本设计即业界最佳实践的翻译:随机 256bit 令牌、哈希存储、HttpOnly/Secure/SameSite、服务端校验、过期拒绝、登出即吊销——对应 OWASP Session Management Cheat Sheet 逐条要求;「成熟」体现在模式本身。现成认证库的评估归实现期技术稿,模式不变

3.2 令牌哈希存储

拖库不泄会话令牌。

3.3 过期清理为惰性删除

校验命中过期行即删 + 拒绝;不建定时清理任务——过期行占用量级:个位数/月,无清理压力。

3.4 单设备多会话不互斥

同一账号可多处登录(各自行)——单人场景无需「顶号」语义。

4. 写入时机

时机 动作
登录成功 INSERT(用户名 + PBKDF2 验证密码通过)
登出 DELETE 该行
校验命中过期行 DELETE + 拒绝(惰性清理)

5. 待定事项

事项 归属
cookie 参数(HttpOnly / Secure / SameSite=Lax / Path 限管理面)、会话时长取值 技术稿