乐闻世界logo
搜索文章和话题

Cookie 的 Domain 和 Path 属性有什么作用?如何正确设置?

2026年3月7日 12:25

Cookie 的 Domain 和 Path 属性用于控制 Cookie 的作用范围,正确设置这些属性对于安全性和功能实现都很重要。

Domain 属性

作用

  • 指定 Cookie 有效的域名
  • 控制哪些子域名可以访问该 Cookie

设置规则

javascript
// 当前域名为 www.example.com // 1. 不设置 Domain(默认) document.cookie = "token=abc"; // 只有 www.example.com 可以访问 // 2. 设置为当前域名 document.cookie = "token=abc; Domain=www.example.com"; // 只有 www.example.com 可以访问 // 3. 设置为父域名(带点前缀) document.cookie = "token=abc; Domain=.example.com"; // 所有子域名都可以访问(www.example.com, api.example.com 等) // 4. 错误示例:设置为其他域名 document.cookie = "token=abc; Domain=other.com"; // 浏览器会忽略此设置

注意事项

  • Domain 必须是当前域名的父域名或相同域名
  • 设置父域名时需要带点前缀(.example.com)
  • 不能设置为完全不同的域名

Path 属性

作用

  • 指定 Cookie 有效的路径
  • 控制哪些 URL 路径可以访问该 Cookie

设置规则

javascript
// 当前域名为 www.example.com // 1. 不设置 Path(默认) document.cookie = "token=abc"; // 只有当前路径及其子路径可以访问 // 2. 设置为根路径 document.cookie = "token=abc; Path=/"; // 整个域名下的所有路径都可以访问 // 3. 设置为特定路径 document.cookie = "token=abc; Path=/api"; // 只有 /api 及其子路径可以访问(/api/users, /api/data 等) // 4. 设置为父路径 document.cookie = "token=abc; Path=/admin"; // 只有 /admin 及其子路径可以访问

匹配规则

  • Cookie 只在指定的路径及其子路径下发送
  • 路径匹配是前缀匹配
  • 更具体的路径优先级更高

组合使用示例

javascript
// 场景 1:全站通用 Cookie document.cookie = "theme=dark; Domain=.example.com; Path=/"; // 场景 2:仅 API 使用的 Cookie document.cookie = "apiToken=xyz; Domain=.example.com; Path=/api"; // 场景 3:管理后台专用 Cookie document.cookie = "adminToken=123; Domain=admin.example.com; Path=/admin";

安全考虑

  1. 最小权限原则
javascript
// 不推荐:过于宽泛 document.cookie = "token=abc; Domain=.example.com; Path=/"; // 推荐:限制范围 document.cookie = "token=abc; Domain=api.example.com; Path=/api/v1";
  1. 防止 Cookie 泄露
  • 敏感 Cookie 应限制在特定路径
  • 避免在静态资源路径设置 Cookie
  • 不同功能的 Cookie 使用不同路径

实际应用场景

  1. 单点登录(SSO)
javascript
// 在认证域名设置 document.cookie = "ssoToken=xyz; Domain=.example.com; Path=/"; // 所有子域名共享登录状态
  1. 多环境隔离
javascript
// 开发环境 document.cookie = "token=dev; Domain=.dev.example.com; Path=/"; // 生产环境 document.cookie = "token=prod; Domain=.example.com; Path=/";
  1. 功能模块隔离
javascript
// 用户模块 document.cookie = "userToken=abc; Path=/user"; // 支付模块 document.cookie = "paymentToken=xyz; Path=/payment";
标签:Cookie