partitioned cookie需同时满足secure=true、samesite=lax/strict且禁用samesite=none,仅chromium 115+支持,必须https(localhost除外),第三方上下文需storage access api授权,且只能由服务端set-cookie设置。

要在 Cookie 中启用 Partitioned 属性以支持 CHIPS(Cookies Having Independent Partitioned State),关键在于正确设置 Partitioned 标志,并确保 Cookie 同时满足其他必要条件——否则浏览器会直接拒绝该 Cookie。
什么是 Partitioned 和 CHIPS
Partitioned 是一个 Cookie 属性,用于声明该 Cookie 应被“分区存储”,即按顶级网站(top-level site)隔离。CHIPS 是 Chrome 等浏览器实现的机制,让第三方 Cookie 在不同上下文中拥有独立副本(比如在 example.com 嵌入的 widget.example.net 的 Cookie,不会与在 another-site.com 中嵌入的同一域名 Cookie 共享)。这既缓解跨站追踪,又保留了合法第三方功能(如登录态、支付组件)的可用性。
启用 Partitioned 的硬性前提
仅加 Partitioned 不够,必须同时满足以下全部条件,否则浏览器会忽略该 Cookie 或直接丢弃:
-
必须是 Secure:Cookie 只能通过 HTTPS 设置(
Secure属性不可省略) -
必须指定 SameSite=Lax 或 SameSite=Strict:
SameSite=None与Partitioned冲突,会被拒绝 -
不能是 HttpOnly(可选但常见限制):目前主流浏览器(Chrome ≥115)允许
HttpOnly+Partitioned,但需注意服务端设置时明确包含两者;不过若需 JS 读取(如用于客户端状态同步),则不能设HttpOnly -
Domain 必须是注册域名(eTLD+1)或其子域:例如
widget.example.com可设Domain=example.com,但不能设为.com或跨主域(如Domain=google.com)
服务端设置示例(Node.js/Express)
使用 res.cookie() 时显式传入所有必需选项:
httpOnly: true,
secure: true,
sameSite: 'Lax',
partitioned: true,
maxAge: 3600000
});
注意:partitioned: true 是 Express 4.19+ 原生支持的选项;旧版本需手动拼接 Set-Cookie 字符串(如 res.setHeader('Set-Cookie', 'session_id=abc123; Path=/; Secure; SameSite=Lax; Partitioned'))。
客户端 JavaScript 设置的限制
浏览器禁止**通过 document.cookie 设置 Partitioned Cookie(出于安全考虑)。所有带 Partitioned 的 Cookie 必须由服务端通过 Set-Cookie 响应头下发。前端只能读取已存在且未标记 HttpOnly 的 Partitioned Cookie(前提是 SameSite 和 Secure 等条件已被服务端满足)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











