Page:
T-267
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
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.
同步来源:
docs/tasks/T-267.md· commitafc651f75a3a
id: T-267 title: 将管理 Web Session 固定有效期延长为30天 phase: 2 deps:
- T-204
- T-266 status: DONE created: 2026-08-01 context_ref: 9409b97 work_branch: null write_paths:
- docs/tasks/T-267.md
- docs/current-state.md
- docs/02-requirements.md
- docs/03-tech-stack.md
- docs/04-architecture.md
- docs/api.md
- backend-api/README.md
- backend-api/internal/usecase/**
- backend-api/internal/transport/webui/**
问题 / 背景
管理后台当前每次登录创建固定8小时 ADMIN 服务端 session。内部采购管理人员需要减少 重复登录,将网页登录有效期改为1个月。
Go time.Duration 不表达自然月,本任务把“1个月”固定定义为 30天,即720小时、
2,592,000秒,与 T-266 的设备 token 期限表达一致,但两类凭证继续完全隔离。
行为契约
- 新创建 ADMIN Web Session 的绝对有效期固定为
30 * 24 * time.Hour。 - 登录成功时,服务端 session 的
expires_at、浏览器 Cookie 的Expires和Max-Age必须采用同一个到期时间;Max-Age约为2592000秒,只允许请求执行耗时造成的秒级差异。 - 已有 session 保留数据库中的原
expires_at,不批量延长;部署后管理员需重新登录一次 才能取得30天 session。 - session 不因浏览页面、提交表单或 API 请求滚动续期,不增加 refresh session。
- 退出登录、账号禁用、session 撤销和绝对到期仍在下一次请求立即生效。
不变边界
- BUYER 设备 Bearer token 继续使用 T-266 定义的固定30天有效期,两类凭证不可互换。
- 管理 Cookie 继续使用
HttpOnly、TLS 下Secure和SameSite=Lax。 - CSRF Cookie 的独立1小时
Max-Age不变;CSRF token 可按既有流程轮换,不影响登录 session。 - 设备 secret、任务 claim token、claim 租约、execution 授权和幂等 key 生命周期均不变。
- 不增加数据库迁移或可配置环境变量。
方案
- 将
AdminSessionLifetime改为30 * 24 * time.Hour。 - 增加固定期限测试,避免实现常量与测试期望同时漂移。
- 增加 Web 登录 Cookie 测试,核对
Expires和Max-Age与服务端到期时间一致。 - 同步需求、技术栈、架构、API、后端说明和当前状态文档。
- 运行 Go 全量测试和根
init.ps1。
验收要点
- 新登录产生的
expires_at - created_at严格等于30天。 - 登录 Cookie 的
Expires与服务端到期时间一致,Max-Age接近2592000秒。 - 已有 session 不被迁移或静默延期。
- 过期、撤销、退出和用户禁用测试继续通过。
- BUYER token、CSRF Cookie 和任务相关生命周期无改动。
- Go 全量测试和根
init.ps1通过。
执行记录
- 2026-08-01:建立任务契约,明确30天为固定绝对期限,既有 session 不迁移,管理 Session 与 BUYER Bearer token、CSRF Cookie 继续隔离。
- 2026-08-01:将
AdminSessionLifetime从8小时改为30 * 24 * time.Hour;新创建 Session 的数据库expires_at固定为30天后,既有记录不更新。 - 2026-08-01:Web 登录测试核对 Cookie
Expires与服务端结果一致,Max-Age在2592000秒的请求耗时容差内;CSRF Cookie 的独立1小时配置未修改。 - 2026-08-01:
go test ./internal/usecase ./internal/transport/webui、go test ./...和根init.ps1全部通过;根检查覆盖 Android Debug/Release 单测、Debug APK、共享 契约、导入工具和 Go 后端全量测试。