位置:首页 > JavaScript > JavaScript设置Cookie的Domain属性实现跨子域共享

JavaScript设置Cookie的Domain属性实现跨子域共享

时间:2026-08-18  |  作者:火苗实验室  |  阅读:0

这里有个前提不能含糊:Domain必须设置成带点开头的父域,比如.example.com,同时把Path统一设为/,并开启Secure(这在HTTPS场景下是必需项),SameSite则配置为Lax或None。无论是服务端的Set-Cookie,还是前端的document.cookie,都要把这些属性明确写清楚,别把兼容性寄托在默认行为上。

Ja vaScript 中 Cookie 怎么设置 Domain 属性实现跨子域共享

如果想在 Ja vaScript 里通过 document.cookie 设置 Cookie 的 Domain 属性,让主域名(如 example.com)和所有子域名(如 www.example.comapi.example.com)都能共用这份 Cookie,关键不在“跨域”,而在于把父域的作用范围声明正确。

也就是说,必须显式写入带前导点号的域名。同时,还要让其他相关属性保持一致并相互配合。

Domain 必须带前导点号(.example.com)

浏览器只认以点开头的 Domain 值为“父域通配”,这样该 Cookie 才能在所有子域下可见:

  • 正确:domain=.example.com → 可被 example.comwww.example.comshop.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 必须同时启用

前端设置示例与限制

Ja vaScript 只能设置非 HttpOnly 的 Cookie。HttpOnly Cookie 由服务端下发,JS 无法写入或读取。

// 设置一个可被所有子域读取的用户偏好 Cookie
document.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),浏览器会直接忽略。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多