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

要在 JavaScript 中通过 document.cookie 设置 Cookie 的 Domain 属性,实现主域名(如 example.com)与所有子域名(如 www.example.com、api.example.com)之间的共享,关键不是“跨域”,而是**正确声明父域作用域**——必须显式写入带前导点号的域名,且其他属性需协同一致。
Domain 必须带前导点号(.example.com)
浏览器只认以点开头的 Domain 值为“父域通配”,才会让该 Cookie 在所有子域下可见:
- ✅ 正确:
domain=.example.com→ 可被example.com、www.example.com、shop.example.com读取 - ❌ 错误:
domain=example.com(无点)→ 多数现代浏览器仅限主域,子域无法访问 - ❌ 错误:
domain=www.example.com→ 仅限该子域,其他子域完全隔离
配套属性必须统一设置
仅设 domain 不够,路径、协议、安全策略不匹配也会导致子域间失效:
-
path=/:确保所有子域下的任意路径都能携带该 Cookie(避免写成
path=/login这类窄路径) - secure:全站 HTTPS 时必须加;否则 HTTPS 页面不会发送该 Cookie
-
samesite=lax 或 none:Lax 是默认值,适合多数跳转场景;若需从外部站点(如营销页)跳转并携带 Cookie,得设
samesite=none,但此时secure必须同时启用
前端设置示例与限制
JavaScript 只能设置非 HttpOnly 的 Cookie(HttpOnly Cookie 由服务端下发,JS 无法写入或读取):
// 设置一个可被所有子域读取的用户偏好 Cookiedocument.cookie = "theme=dark; domain=.example.com; path=/; secure; samesite=lax";
// 注意:不能省略 domain=,也不能漏掉 secure(HTTPS 环境下)
- 不要依赖浏览器默认行为——它不会自动把
www.example.com下设的 Cookie “升级”到.example.com - 若用
js-cookie库,写法更清晰:Cookies.set('token', 'abc', { domain: '.example.com', path: '/', secure: true, sameSite: 'lax' });
注意 HttpOnly 和安全边界
前端 JS 设置的 Cookie 天然不具备 HttpOnly 属性,因此不适合存敏感凭证(如 session_id)。这类信息应由后端通过 Set-Cookie 响应头下发,并设 HttpOnly + Secure + domain=.example.com。
另外,domain 只能设为当前页面所属域的父域或同级域,不允许设为无关域名(例如在 example.com 页面里写 domain=.google.com),浏览器会直接忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











