Yasin

Yasin

cookies自动携带的条件

只要 Cookie 存在且满足条件,浏览器会自动附加,客户端代码不需要(也无法阻止)。


自动携带的条件

并不是"所有 Cookie 无条件发送",浏览器会按以下规则过滤:

条件 说明
域名匹配 domain=example.com 的 Cookie 只发给 example.com
路径匹配 path=/api 的 Cookie 只在请求 /api/* 时携带
Secure 设了 secure 的只在 HTTPS 请求中携带
SameSite 跨站请求时是否携带(见下方)
未过期 过期的 Cookie 不会发送

SameSite 是唯一能"阻止自动携带"的属性

SameSite=Strict  → 只有同站请求才携带(从其他网站跳过来的首次请求也不带)
SameSite=Lax     → 同站 + 顶级导航(点链接跳转)携带,第三方资源请求不带
SameSite=None    → 跨站也携带(必须同时设 Secure)

这也是为什么 SameSite=Strict 能防 CSRF:攻击者网站触发的请求,Cookie 不会被携带,服务端就拿不到 Token。


所以你的理解完全正确

客户端代码(JS):无法控制是否携带 Cookie(HttpOnly 的甚至读不到)
浏览器:根据规则自动决定是否携带
服务端:只要浏览器带来了,就能读到

这个"自动"机制是 Cookie 的核心设计——也是它既强大(SSR 天然拿到认证状态)又需要小心(CSRF 攻击利用的正是这一点)的原因。