【Web】域名与 Cookie 的关系:原理、规则与多级域名共享
本文系统讲解了 Cookie 与域名的关系,核心内容包括:Cookie 是浏览器存储的文本数据,用于登录状态等用途;出于安全考虑,Cookie 必须绑定特定域名;Domain 规则决定了 Cookie 的访问范围,主域设置可被子域共享,但子域设置不能被父域访问;判断依据是请求域名是否以 Cookie 的 Domain 结尾,与域名级数无关;跨子域共享需设置 Domain 为主域,并配合 SameS
📌
在 Web 项目中,Cookie 经常用于存储登录状态、用户设置或会话信息。虽然它的存储方式很简单,但 Cookie 与“域名(Domain)”之间的关系常常让人困惑:为什么有的子域能读到 Cookie,有的读不到?为什么换了域名后登录状态就失效?为什么多级域名不一定能共享 Cookie?
理解这些问题的关键,就是Cookie 的 Domain 规则。
本文将用最简洁的方式解释:
Cookie 是什么?为什么要和域名绑定?如何设置?多级域名能否共享 Cookie?以及 Cookie 跨域的完整规则。
1️⃣ Cookie 是什么?
Cookie 是浏览器存储的一小段文本数据,常见用途包括:
- 登录状态(token、session id)
- 用户偏好(语言、主题)
- 分析与统计
- 业务状态记录
浏览器的行为是:
只要请求的域名满足 Cookie 的 Domain 规则,它就会自动把 Cookie 发送给服务器。
这就是“Cookie 会跟着请求自动携带”的原理。
2️⃣ 为什么 Cookie 必须绑定域名?
出于安全考虑。
如果所有网站都能读同一个 Cookie,会出现:
- 登录状态被其他网站窃取
- 个人信息泄露
- 跨站攻击更加容易
所以浏览器规定:
Cookie 必须属于一个特定的 Domain(域名),且只有满足规则的域名才能访问它。
3️⃣ Cookie 的 Domain 是如何控制访问范围的?
Domain 决定“哪些域名能读/写这个 Cookie”。
例如:
Set-Cookie: token=123; Domain=example.com;
所有以 example.com 结尾的域名都能访问:
- example.com
- www.example.com
- api.example.com
- x.y.z.deep.example.com
✔ 无论域名有几级,只要以 example.com 结尾,就都能访问。
4️⃣ Cookie Domain 的核心规则(最重要部分)
✔ 规则 1:不设置 Domain → 只属于当前域名
在 www.example.com 设置:
document.cookie = "a=1";
Domain 默认是 www.example.com。
其他域名访问不了:
- × example.com
- × api.example.com
✔ 规则 2:设置为主域 → 所有子域共享
Set-Cookie: token=abc; Domain=example.com;
以下域名全部可以读取:
- example.com
- www.example.com
- api.example.com
- deep.level.a.b.example.com
✔ 无论几级域名,只要以 example.com 结尾即可。
✔ 规则 3:子域设置 Cookie → 父域无法访问
Set-Cookie: uid=1; Domain=api.example.com;
访问情况:
| 域名 | 能否访问 |
|---|---|
| api.example.com | ✔ |
| v1.api.example.com | ✔ |
| example.com | ❌ |
| www.example.com | ❌ |
子域只能向“更下一级”扩展,而不能向上扩展到主域。
✔ 规则 4:层级数量不重要,只看“后缀匹配”
判断 Cookie 是否可访问的逻辑只有一个:
请求域名.endsWith(cookie.Domain)
例如:
cookie.Domain = example.com
请求域名 = a.b.c.d.example.com
a.b.c.d.example.com 以 example.com 结尾
✔ Cookie 可访问
因此:
❗ 跨 2 级、3 级、5 级域名都没问题,只要是“子域”即可。
❗ 是否能访问 Cookie与域名级数完全无关。
5️⃣ 多级域名 Cookie 共享的清晰总结
假设 Cookie 设置 Domain = example.com:
| 域名 | 能访问? | 原因 |
|---|---|---|
| example.com | ✔ | 完全匹配 |
| www.example.com | ✔ | 子域 |
| api.example.com | ✔ | 子域 |
| a.b.c.d.e.f.example.com | ✔ | 多级子域 |
结论:
✔ 五级域名可以访问三级域的 Cookie
✔ 十级域名也可以访问
✔ 只要是子域就可以
❌ 只要不是子域就不可以
6️⃣ 设置共享 Cookie 的正确方式(跨子域常用)
想让所有子域共享 Cookie,例如:
- www.example.com
- api.example.com
- admin.example.com
需要设置:
Set-Cookie: token=xxx; Domain=example.com; Path=/; SameSite=None; Secure;
注意:
- Domain 必须写成主域(example.com)
- 跨域请求必须设置 SameSite=None; Secure
- 本地的 localhost 不支持跨子域 Cookie
7️⃣ 常见错误与陷阱
| 错误情况 | 原因 |
|---|---|
| 子域无法访问 Cookie | Domain 设置过于具体 |
| 登录状态跨子域失效 | Domain 没写成主域 |
| Cookie 设置无效 | 试图设置一级域(如 com),浏览器禁止 |
| 跨域请求 Cookie 不带上 | 缺少 SameSite=None; Secure |
| localhost 不能共享 Cookie | localhost 不是真实域名 |
🔚 最终总结(最易懂版本)
- Cookie 是否能跨多级域名共享,不看域名有几级,只看是否是子域。
- 判断规则就是:请求域名是否以 Cookie 的 Domain 结尾。
- 主域设置 Cookie → 所有子域(任意多级)都能读。
- 子域设置 Cookie → 只能向下共享,不能向上共享。
- 跨域场景需要设置
SameSite=None和Secure。 - localhost 不能做多级域名调试。
更多推荐



所有评论(0)