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";
安全考虑
- 最小权限原则
javascript// 不推荐:过于宽泛 document.cookie = "token=abc; Domain=.example.com; Path=/"; // 推荐:限制范围 document.cookie = "token=abc; Domain=api.example.com; Path=/api/v1";
- 防止 Cookie 泄露
- 敏感 Cookie 应限制在特定路径
- 避免在静态资源路径设置 Cookie
- 不同功能的 Cookie 使用不同路径
实际应用场景
- 单点登录(SSO)
javascript// 在认证域名设置 document.cookie = "ssoToken=xyz; Domain=.example.com; Path=/"; // 所有子域名共享登录状态
- 多环境隔离
javascript// 开发环境 document.cookie = "token=dev; Domain=.dev.example.com; Path=/"; // 生产环境 document.cookie = "token=prod; Domain=.example.com; Path=/";
- 功能模块隔离
javascript// 用户模块 document.cookie = "userToken=abc; Path=/user"; // 支付模块 document.cookie = "paymentToken=xyz; Path=/payment";