partitioned cookie 必须由服务端通过 set-cookie 响应头设置,javascript 的 document.cookie 无法生效;其作用是禁止第三方上下文(如 iframe)访问,仅限顶级导航使用,且需配合 secure、samesite=lax/strict 等属性。

JavaScript 无法直接通过 document.cookie 设置 Partitioned 属性。
Partitioned Cookie 必须由服务端设置
Partitioned 是一个 HTTP 响应头层面的安全属性,仅支持在服务端通过 Set-Cookie 响应头声明。浏览器会忽略 JavaScript 中用 document.cookie = "key=value; Partitioned" 写入的 Partitioned 字段——它会被静默丢弃,不生效。
- ✅ 正确方式:后端在响应中返回类似这样的头:
- ❌ 错误方式(无效):
这段代码不会触发分区行为,浏览器会当作普通 Cookie 处理。
Partitioned 的作用不是“支持第三方”,而是限制第三方
加 Partitioned 不是为了让第三方能读取你的 Cookie,恰恰相反:它明确禁止第三方上下文(如嵌入的 iframe、广告脚本)访问该 Cookie。
- 当顶级页面是
https://a.com,其中嵌入了https://b.com的 iframe 时: - 未加 Partitioned 的 Cookie:iframe 中的
b.com脚本可能通过同源策略漏洞或跨域配合机制间接利用(尤其配合宽松 SameSite) - 加了 Partitioned 的 Cookie:仅限
a.com顶级导航上下文使用,b.com的 iframe 完全无法读取或发送该 Cookie
前端需配合的其他关键属性
要使 Partitioned 生效,必须同时满足几个前提条件,前端开发需确保服务端配置完整:
- Secure:必须在 HTTPS 环境下设置(HTTP 协议下 Partitioned 会被浏览器拒绝)
-
SameSite=Lax 或 Strict:Partitioned 与
SameSite=None互斥;若设为None,Partitioned 将被忽略 - Path 和 Domain 显式指定:避免因默认值导致匹配失败(例如 Domain 缺失可能导致跨子域失效)
兼容性与检测建议
Partitioned 自 Chrome 114、Safari 16.4 起支持,Firefox 目前暂未实现。可在服务端根据 User-Agent 判断是否启用该属性,或采用渐进增强策略:
- 对新版本浏览器:下发
Partitioned+SameSite=Lax+Secure - 对旧浏览器或 Firefox:降级为仅
SameSite=Lax+Secure,保持基础隔离 - 前端无需 JS 检测 Partitioned 是否生效,可通过 DevTools → Application → Cookies 查看条目是否有 “Partitioned” 标记
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











