用户退出登录后浏览器里还留着旧数据,响应头怎么要求清除

📅 2026-10-12 👁️ 2

用户退出登录后浏览器里还留着缓存和存储,响应头怎么要求清除,靠的是一个由服务端发出的清除信号,而不是页面里的脚本自己删。这个信号就是 Clear-Site-Data 响应头:服务端在退出接口的应答里把它带上,等于把「请清掉哪几类浏览数据」的指令交给客户端,由浏览器按项执行本地清理。它能表达的只有两件事:清哪些类数据、清到哪个范围,其余看客户端是否配合。

退出登录为什么要主动清一遍

登录态由服务端签发:建立会话时下发凭证,注销时服务端把凭证作废。浏览器侧记的是另一套账,页面、脚本、接口应答会进缓存,业务代码也可能把中间结果写进本地存储,这些内容与会话没有绑定关系,不会因为会话失效而自动消失。

于是出现错位:用户点了退出,服务端已经翻篇,旧数据还摊在设备上。下一个人用同一台机器同一个浏览器打开站点,哪怕拿不到新会话,也可能从残留里看到上一位的页面内容。主动清一遍,就是把两侧对齐。

具体到站内,登录态由 JWT 承载,服务端注销与会话失效是一侧的事,浏览器本地的缓存与存储要靠这个响应头配合清一遍。就这两点,不引申出别的期待。

能清哪几类本地数据

指令按项给出,一条应答里可以同时列多项,客户端只处理被列出的那些类。常见分项与各自管的东西如下。

清除项 大致作用范围 退出登录时为什么需要它
cache 浏览器为该站点保存的缓存内容 收走带登录上下文的页面与接口应答残留
cookies 整个注册域下的凭据,含各子域 把散落在多个子域的登录凭据一并清掉
storage 响应对应来源的本地存储 脚本写进本地存储的中间数据靠它收尾
executionContexts 当前相关的执行上下文 让仍在运行的脚本环境一并结束,别让旧代码继续持有数据

列少了收尾不干净,列多了会误伤用户打算留着的东西。

为什么只在加密连接里生效

这条能力只在安全上下文里可用,落到部署上就是应答必须走加密连接,也就是 HTTPS。明文连接里带上这个头,浏览器不会照做,清理动作也不会发生。

原因不难理解:它要求的是删本地数据,影响面很大,浏览器不接受可能被中间环节篡改或伪造的信号。结论是先确认站点整体走加密入口,再讨论这个头有没有生效;测试里加了却没起作用,先查访问路径是不是加密连接。

清除范围到来源还是到注册域

不同分项的落点不一样,这是最容易混淆的一处。

cookies 的影响面是整个注册域,包含它下面的子域。主域下多个子系统共用同一套登录凭据时,一条指令就能把它们一并覆盖,不需要挨个域名分别处理。

storage 清的是响应对应来源的本地存储。来源由协议、主机、端口共同确定,换个主机或换个协议就是另一个来源,不会被连带清理。

差别在这里有实际意义:想收干净凭据,靠的是注册域那一层的范围;想清准本地存储,就得让带这个头的应答出现在真正写入数据的来源上。

公共设备上为什么更值得加这一层

私人设备上的残留主要影响使用者自己。公共设备不同:前台的平板、车间共用的终端、***流用的同一台机器,上一位退出后浏览器不归他管,下一位直接接手同一份本地数据。这类场景里,服务端单方面作废会话收不干净前一个人的痕迹,客户端这一层的清理补上了缺口。

也要看清它靠不住的地方:服务端只能发信号,清不清、清得干不干净由客户端执行,不配合的浏览器可以完全忽略这条指令,不同浏览器对不同分项的支持程度也不一样。自 2023 年 9 月起这项能力在浏览器里普遍可用,但普遍可用不等于各分项表现一致。

所以它替代不了服务端的会话撤销。作废凭证、吊销记录、清理服务端侧的状态仍要在服务端做完,这一层是收尾,不是安全边界本身。

常见问题

问:退出接口只把会话作废,不返回这个头,会有什么后果? 答:服务端侧干净了,但浏览器在访问期间攒下的缓存与本地存储仍留在设备上,换人使用时这些残留可能被下一个看到的人翻出来。

问:能不能只在退出这一刻下发? 答:可以,它做的是删除动作,代价由客户端承担;放在确认要结束会话的接口上语义清楚,也不会在正常浏览途中清掉用户正在用的数据。

问:清了 cookies 这一项,等于本地数据都清完了吗? 答:不等于。cookies 覆盖的是注册域下的凭据,本地存储属于另一分项,缓存同样另算,要分别列出才有效果。

相关文章

页面里嵌第三方视频,iframe 的能力授权按什么放行

页面里嵌第三方视频涉及两层限制:来源域名按白名单放行,摄像头、定位、自动播放这些能力按最小集逐项授权。PbootCMS 在 V3.2.18 的更新记录里对可信视频域名保留默认来源策略,并对 allow 属性做了 token 白名单。本文解释内嵌框架为什么同时带着脚本与媒体能力、精确域与子域通配怎么分,以及放行与授权为什么要分开配。

2026-10-12

网站挂在代理后面,登录锁定和黑名单为什么会认错来源地址

网站挂在反向代理后面时,程序读到的连接来源往往是代理地址,而转发头里的内容又由客户端可控,把两层混为一谈会让登录锁定和黑名单认错对象。PbootCMS 在 V3.2.25 的更新记录里修过无条件信任来源转发头的问题。本文讲两层地址各自的来历、只在可信链路里取最右可信值的做法,以及限速与锁定该用哪一层。

2026-10-12

后台留言批量删除接口按参数拼接,删除范围该怎么校验

后台留言的批量删除如果直接把前端传来的编号列表拼进删除条件,一次请求就可能删掉范围外的内容。PbootCMS 在 V3.2.18 的更新记录里修过这一类参数注入,做法是严格校验要删除的 id 列表。本文说明批量接口为什么把影响面放大、编号该按类型和存在性怎么验、删除范围为什么要服务端重新算一遍,以及误删之后回收站能兜住什么。

2026-10-12

模板标签输出了脚本开标签,内容怎么会被当成代码执行

PbootCMS修复过站点标签输出脚本开标签的风险并增强了标签页参数过滤——当可编辑内容带着开标签进入模板引擎,数据就会被当成代码执行。本文解释数据变成代码的那一步发生在哪、标签输出位为什么要过滤、HTML、属性、脚本、URL四种上下文为什么要分别转义,以及越靠前的过滤越省事的分层收口。

2026-10-11

浏览器会标出请求来自本站还是外站,服务端怎么据此挡住跨站请求

浏览器会给请求加上标明来源关系的几个 Sec-Fetch 请求头,前端脚本改不了它们。取值区分同源、同站、跨站与无发起方,服务端按这些关系决定放行还是拒绝,就能对跨站请求伪造做出一道与写操作确认互补的防线;这组头只在可信地址的请求里发送。本文讲四个取值的含义、按上下文放行的写法,以及它与回合级操作审批各自管什么。

2026-10-12

内容没变时服务器只回一个状态码,条件请求靠哪个标识判断

缓存过期不代表要重新下载整份内容。ETag 是某一版资源的标识,资源内容变了就必须生成新值;客户端回访时用 If-None-Match 把旧值带回,服务端比对一致就只回一个不带正文的状态码。本文讲这个标识代表什么、强校验与弱校验的差别、弱标识为什么会影响分段请求,以及内容频繁改动的站点怎么用它减少重复传输。

2026-10-12

连接还没握完就收到请求,服务器为什么宁可返回一个过早状态码

TLS 的早期数据让客户端在第一个往返里就把请求发出去,省下一次握手等待,代价是这类请求存在被重放的风险。425 Too Early 表示服务器不愿冒险处理一个可能被重放的请求,宁可先拒。本文讲早期数据省的是什么、风险落在哪一类请求上、幂等与非幂等为什么要分开对待,以及以 Go 语言为技术栈的服务在这一层要做什么取舍。

2026-10-12

自己的图片被别的网站直接引用时,靠哪个响应头决定放不放行

自己的图片被别的网站直接引用时,决定放不放行的是资源方而不是引用方。Cross-Origin-Resource-Policy 响应头由被引用的资源设置,声明哪些来源可以加载它,取值分同源、同站、跨来源三档,默认挡住的是不带 cors 的跨站请求。本文讲三档各放行到哪一层、它与发起方的隔离头不是同一端,以及图片、字体各自要不要放开。

2026-10-12