必须将cookie的domain属性设为以点开头的父域(如.example.com),并统一配置path=/、secure(https下必需)、samesite=lax或none;服务端set-cookie与前端document.cookie均需显式声明,不可依赖默认行为。

要让 Cookie 在主域名(如 example.com)和所有子域名(如 www.example.com、api.example.com、shop.example.com)之间自由共享,核心就是正确设置 Domain 属性为以点开头的父域形式 —— 即 .example.com。这不是可选项,而是必须显式声明的配置项;浏览器不会自动“升级”作用域。
Domain 属性必须带前导点号
Cookie 的 Domain 值决定了哪些主机可以读取它。只有写成 .example.com(注意开头的 .),浏览器才会将其匹配到:
- example.com(主域名)
- www.example.com
- api.example.com
- any.sub.example.com
若写成 example.com(无点),部分浏览器会限制其仅对主域名生效;写成 www.example.com 则只对该子域有效,其他子域完全不可见。
配套属性必须统一且合理
仅设对 Domain 不够,Path、Secure、SameSite 等属性不一致也会导致共享失败:
- Path=/:确保所有子域路径下都能携带该 Cookie,避免因路径(如 /auth/token)太窄而丢失
- Secure:如果全站走 HTTPS,必须加上;否则 HTTPS 页面不会发送非 Secure Cookie
- SameSite=Lax 或 None:Lax 是默认值,适合多数场景;若需跨站跳转(如从营销页跳登录页)携带 Cookie,得设为 None,但此时 Secure 必须同时启用
服务端与前端设置都要显式声明
不能依赖默认行为。无论是后端 Set-Cookie 响应头,还是前端 document.cookie 赋值,都必须手动写入 Domain:
- 后端示例(Node.js/Express):
res.cookie('session_id', 'abc123', { domain: '.example.com', path: '/', secure: true, httpOnly: true, sameSite: 'lax' }); - 前端示例(仅限非 HttpOnly Cookie):
document.cookie = "token=xyz; domain=.example.com; path=/; secure; samesite=lax";
注意:HttpOnly Cookie 无法被 JavaScript 读写,所以前端设置仅适用于客户端状态类 Cookie(如 UI 主题偏好)。
安全边界与常见陷阱
虽然共享方便,但要注意限制范围:
- 你只能将 Domain 设为当前页面所属域的父域或同级域,不能设为无关域名(如从 example.com 设置 domain=.google.com)
- 一旦设为 .example.com,所有子域均可读写该 Cookie,因此敏感信息(如长期 token)建议配合短期有效期、绑定设备指纹或后端二次校验
- 本地开发时,localhost 不支持带点的 Domain(如 .localhost),可用 127.0.0.1 + 自定义 hosts 映射绕过











