cookie的path和domain必须严格一致才能正确设置与删除,path=/admin/(尾斜杠不可省)实现前缀隔离,domain=.example.com(前导点不可少)支持跨子域共享,且删除时需完全复刻原path、domain、secure等属性。

path=/admin 会泄露到 /admin-api,必须写成 path=/admin/
path 是前缀匹配,不是目录或完整路径匹配。浏览器只要发现当前请求 URL 路径以 path 值开头(且后跟 / 或路径结束),就自动携带该 Cookie。
常见错误写法:document.cookie = "token=abc; path=/admin" → 实际会随 /admin、/admin/、/admin-user、/admin-api 等所有以 /admin 开头的路径发送,存在越权风险。
- 正确隔离管理后台:用
path=/admin/(尾斜杠不可省)→ 只匹配/admin/、/admin/users、/admin/settings,不匹配/admin或/admin-api - 静态资源隔离示例:
Set-Cookie: static_v1=xxx; path=/static/,避免和业务 Cookie 混用 - 根路径全局可用:显式写
path=/,不要依赖默认值——不同浏览器对“默认 path”的推导逻辑不一致(比如有的取上层目录)
domain=.example.com 才能跨子域共享,domain=example.com 不行
domain 控制的是 Cookie 可被哪些主机名读取。漏掉前导点(.)是跨子域失效的最常见原因。
假设你有 app.example.com 和 api.example.com 两个子域,想共享登录态:
- ✅ 正确:
domain=.example.com→ 匹配example.com及所有子域(www、app、api) - ❌ 错误:
domain=example.com(没点)→ 仅精确匹配主域名,子域无法读取 - ❌ 错误:
domain=app.example.com→ 仅限该子域,且其他子域完全不可见 - ⚠️ 本地开发注意:
localhost下domain属性会被浏览器忽略,此时只能靠path和协议(Secure)控制范围
删 Cookie 必须复刻当初写的 path 和 domain
删除失败不是因为语法错,而是因为浏览器把 “token=; path=/api/; domain=.example.com” 和 “token=abc; path=/api/; domain=.example.com” 当作两个独立 Cookie 处理。漏掉任意一项,就删不掉原 Cookie。
例如,当初设置的是:
document.cookie = "session_id=xyz; path=/dashboard/; domain=.example.com; Secure; HttpOnly";
那么删除时必须严格一致:
document.cookie = "session_id=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/dashboard/; domain=.example.com; Secure";
-
path和domain缺一不可,大小写、尾斜杠、前导点都要完全相同 -
Secure属性若原 Cookie 含有,删除时也得带上;否则在 HTTPS 页面下删不掉 -
HttpOnlyCookie 无法用document.cookie删除,必须由服务端发Set-Cookie清除
path 不是权限开关,服务端校验不能少
path 只影响浏览器是否自动带 Cookie 发起请求,它不阻止 JS 读取(除非加 HttpOnly),也不防 CSRF、XSS 或越权访问。
比如你设了 path=/user/,攻击者仍可在 /user/profile 页面里执行 document.cookie 读到未标记 HttpOnly 的 Cookie;或者诱导用户点击恶意链接,触发带合法 Cookie 的跨站请求。
-
path是辅助隔离层,不是安全边界 - 敏感操作(如修改密码、转账)必须由服务端校验 session 真实性 + 用户角色 + 资源归属
- 生产环境建议组合使用:
path=/api/+domain=.example.com+Secure+HttpOnly+SameSite=Lax
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











