服务端必须独立校验cookie时效性,因客户端可篡改expires/max-age字段;浏览器仅依其删除cookie,不保证业务有效性;所有关键过期逻辑须以服务端存储的权威时间为准。

因为 Cookie 本身不具备可信性,存储在其中的“有效期”字段完全由客户端控制,服务端无法验证其真实性。
客户端可随意修改过期时间
Cookie 的 Expires 或 Max-Age 属性仅用于指导浏览器何时自动删除该 Cookie,但浏览器不强制执行、也不向服务端证明这个时间是否被篡改。攻击者可用开发者工具直接编辑 Cookie 的 expires 值,把一个已过期的登录凭证“调回有效”,服务端若只依赖该字段判断合法性,就会放行非法请求。
服务端必须独立校验时效性
真正可靠的有效期检查,必须由服务端在每次请求时完成,依据的是服务端数据库或缓存中记录的令牌创建时间、过期时间等权威数据。例如:
- 使用随机 remember_token 时,数据库里存有 created_at 和 expires_at 字段,每次验证都查库比对当前时间
- 使用 JWT 时,payload 中的 exp 字段虽由服务端签发,但签名验证通过后仍需服务端检查是否在合理时间窗口内(防重放)
混淆“浏览器删除时间”和“业务有效时间”
很多人误以为设置了 Max-Age=3600,用户一小时后就自动登出——其实只是浏览器不再发送这个 Cookie。如果攻击者提前复制了该 Cookie,在它被浏览器删除前仍可反复重放;而服务端若没做单次使用或滚动刷新机制,就可能持续接受。
安全设计应默认信任服务端状态
所有关键时效逻辑(如登录态过期、Token 失效、密码重置链接时限)都应以服务端记录为准。Cookie 只承担传输作用,不承载决策依据。把有效期写进 Cookie,等于把门禁卡的“有效期印章”交给持卡人自己盖——形同虚设。










