未设置Max-Age和Expires的Cookie为何关闭浏览器即失效

浅萱酱_7817

浅萱酱_7817

2026-09-13

308人浏览

原创

未设置max-age或expires的cookie默认为会话级,仅存于浏览器内存,关闭浏览器即清除;ie等旧版浏览器仅认expires,稳妥做法应同时设置两者。

未设置max-age和expires的cookie为何关闭浏览器即失效

因为浏览器将其视为“会话级 Cookie”,只保留在内存中,不写入磁盘,关闭浏览器时自动清除。

浏览器对未设过期时间的 Cookie 有默认处理规则

当服务端通过 Set-Cookie 响应头下发 Cookie 时,若既没指定 Max-Age(单位秒),也没指定 Expires(GMT 时间戳),浏览器就按规范将其标记为会话 Cookie。此时 Cookie 的 Max-Age 实际被设为 -1,意味着它仅存在于当前浏览器进程的内存里,不落盘、不持久化。

  • 关闭单个标签页?不影响该 Cookie(只要浏览器主进程还在)
  • 关闭整个浏览器(包括所有窗口)?内存释放,Cookie 立即丢失
  • 重启浏览器?无法恢复,因为没有文件或数据库记录它

这不是服务端问题,而是客户端行为

服务端生成的 session 数据(比如存在内存、Redis 或文件中)通常不会因浏览器关闭而自动删除;失效的是客户端发不出有效的 Cookie: session=xxx 请求头。没有这个标识,服务端就无法关联用户上下文,表现就是“登出”或“状态丢失”。

page-agent 浏览器控制(CDP)
page-agent 浏览器控制(CDP)

使用 page-agent CLI(CDP)控制浏览器;CLI只能通过 GitHub Release 的 .tgz 安装,npm 官方包暂未发布。

下载
  • 换用 Flask-Session 存到 Redis?行为不变——只要 Cookie 丢了,ID 就找不回来
  • 后端日志显示 session 还在?正常。问题出在请求链路前端
  • 用 curl 或 Postman 模拟请求?只要没带 cookie,同样拿不到 session

IE 和部分旧环境还有兼容性陷阱

某些浏览器(尤其是旧版 IE)完全不识别 Max-Age,只认 Expires。如果服务端只设了 Max-Age 而没同步设 Expires,IE 会把它当作会话 Cookie 处理,关浏览器就丢。

  • Chrome/Firefox/Safari:优先用 Max-Age,忽略 Expires(若两者冲突)
  • IE/旧 Edge:忽略 Max-Age,只看 Expires;没设 Expires → 当作会话 Cookie
  • 稳妥做法:两个都设,例如 Max-Age=1800; Expires=Wed, 11 Sep 2026 16:27:00 GMT

用户端设置也可能覆盖服务端策略

即使服务端正确设置了 Max-Age 和 Expires,如果用户在 Chrome/Edge 中开启了「退出时清除 Cookie 和网站数据」,浏览器会在关闭时强制清空所有 Cookie,包括本该持久化的那些。

  • 路径:设置 → 隐私和安全 → Cookies 及其他网站数据 → “退出时清除”
  • 该设置优先级高于服务端任何过期参数
  • 开发者无法绕过,只能在登录页提示用户检查该选项

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11899

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

1126

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

804

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1906

14

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

60

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

40

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Revel 官方 app.conf 文档
Revel 官方 app.conf 文档

共0课时 | 0人学习

php注册登录系统开发实战
php注册登录系统开发实战

共10课时 | 13.8万人学习

PHP基于Cookie的购物车模块设计
PHP基于Cookie的购物车模块设计

共10课时 | 11.1万人学习