Files
Endoleap/docs/SESSION_LIFETIME.md
T

21 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 会话策略与 Cookie 续期
用户确认的策略:30 天无活动过期,正常鉴权时续期,最长签发后 90 天重新登录。继续使用随机、可撤销的服务端会话令牌,不改用 JWT。
## Core
工作分支 `codex/session-lifetime`,提交 `34c461a`,PR #10 已合并;与纯图片改动一同进入主线 7847167,[部署 #889](https://gitea.entroia.com/Zayden-Jung/foundry-core/actions/runs/889) 已成功。新会话执行 30 天闲置 / 90 天绝对期限;既有过期会话不复活,有效会话可在下次鉴权时续期。
- 新会话 expires_in=2592000。
- 004-session-lifetime.sql 增加 created_at / absolute_expires_at。旧会话保留原 expires_at,不复活已过期会话;旧记录的 90 天上限从迁移时间起算。
- 鉴权原子更新 expires_at=min(当前时间+30天, absolute_expires_at)。闲置过期、绝对过期、撤销和跨项目令牌均不可续期。
- 成功鉴权后返回 `X-Foundry-Session-Expires-In`,值为按绝对期限截断后的剩余秒数。平台接口与 auth/me 均支持该头。
## 前端
同源代理从 HttpOnly Cookie 取令牌转发给 Core;不把令牌返回客户端 JavaScript。登录时按照 expires_in 设置 Cookie,普通已认证响应按照续期头更新 Cookie,最多 30 天。临近 90 天时按 Core 返回的剩余秒数缩短 Cookie;401 或非法续期头不续期。
Cookie 保留 HttpOnly、SameSite=Lax、Path=/;生产 HTTPS 使用 Secure。旧 Core 未返回续期头时保持兼容,不自行假定令牌有效期已经延长。
验证覆盖:Cookie 上限及剩余时间、非法头、401 不续期、退出清除;Core CI 覆盖真实隔离数据库中的闲置/绝对过期、并发、撤销、项目隔离、OAuth 发放与旧会话迁移。