max-age 优先于 expires 且更可靠:max-age 以秒为单位指定相对过期时间,不依赖客户端时钟;expires 使用 gmt 绝对时间,易受设备时间误差影响;共存时 max-age 恒生效,expires 被忽略。

Max-Age 和 Expires 都是用来设置 Cookie 过期时间的属性,但 Max-Age 是更现代、更可靠的选择。它直接指定 Cookie 从创建时刻起存活的秒数,而 Expires 依赖客户端本地时间,容易因时区或系统时间不准导致异常。
Max-Age 的基本用法
在 document.cookie 设置 Cookie 时,用 Max-Age=数值(单位:秒)替代 Expires=时间字符串:
-
document.cookie = "theme=dark; Max-Age=86400"→ 有效期 1 天(24×60×60 秒) document.cookie = "token=abc123; Max-Age=3600; Path=/; Secure; SameSite=Strict"- 设为
Max-Age=0或负数,等效于立即删除该 Cookie(需确保 Path 和 Domain 与原设置一致)
为什么 Max-Age 比 Expires 更推荐
Expires 必须是格式严格的 GMT 时间字符串(如 Wed, 21 Oct 2025 07:28:00 GMT),且完全依赖浏览器本地时间;一旦用户设备时间错误,Cookie 可能提前过期或永不清理。Max-Age 是相对时间,不受系统时钟影响,语义清晰、计算简单、兼容性好(所有现代浏览器均支持)。
创建全面的交接文档,使新AI代理能够无缝继续工作,消除歧义。解决上下文耗尽问题。 时机:(1)用户请求保存交接,(2)上下文即将满,(3)主要任务完成,(4)会话结束,(5)恢复工作时。 关键词:保存状态、创建交接、上下文已满、暂停、从...恢复、加载交接、保存进度、会话转移、交接
服务端设置 Max-Age 的方式
后端设置 Cookie 时同样优先使用 Max-Age。例如 Node.js + Express:
-
res.cookie('session_id', 'xyz', { maxAge: 1800000, httpOnly: true, secure: true })→ 30 分钟 - Django 中:
response.set_cookie('lang', 'zh', max_age=604800)(单位为秒) - PHP:
setcookie('user', 'alice', ['expires' => time() + 3600, 'max_age' => 3600]),建议只传max_age(PHP 7.3+ 支持)
注意事项和常见坑
Max-Age 和 Expires 不要同时设置,否则行为由浏览器决定(多数以 Max-Age 为准,但不保证一致)。另外:
- 如果只写
Max-Age不写Path或Domain,删除时必须匹配原始路径才能成功清除 - IE 11 及更早版本不支持 Max-Age,但这类浏览器已基本退出主流场景
- 若需兼容极老环境,可同时提供两者:
Expires=...; Max-Age=...,新浏览器用 Max-Age,旧浏览器回落到 Expires
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










