cookie 的 path 属性仅控制浏览器在指定路径及子路径的 http 请求中自动发送该 cookie,不控制脚本读写权限;真正限制 js 访问需依赖 httponly。

JavaScript 中 Cookie 的 Path 属性本身不控制“脚本能否读取”,而是决定浏览器在哪些 URL 路径下自动把该 Cookie 发送到服务器;但结合当前页面路径与 document.cookie 的读写规则,它能间接实现不同路由间 Cookie 的可见性隔离。
Path 是前缀匹配,不是路由匹配
浏览器判断是否发送或允许 JS 访问某个 Cookie 时,只看请求路径是否以 Cookie 的 Path 值**严格开头**(大小写敏感、必须以 / 开头):
-
Path=/admin → 匹配
/admin、/admin/、/admin/users、/admin/api/v1 -
不匹配:
/admins(前缀不符)、/Admin(大小写敏感)、/user/admin(不是开头)、/admin-dashboard(字符串前缀是/admin-,不是/admin) - Path=/ → 全站生效,所有路径都匹配
JS 设置 Cookie 时必须显式声明 Path
document.cookie 不会继承当前页面路径的“智能推断”,不写 Path 就用默认值(即当前页面完整路径的目录部分),容易导致跨子路径不可见:
- 在
/dashboard/settings页面执行document.cookie = "theme=dark"→ 默认 Path 是/dashboard,无法在/profile读到 - 要让暗色模式全站可用,必须写:
document.cookie = "theme=dark; Path=/; Max-Age=31536000" - 要隔离后台模块,可写:
document.cookie = "token=abc; Path=/admin; Secure"
验证是否按预期隔离
别只靠 console.log(document.cookie) 猜测,要分步确认:
- 打开开发者工具 → Application → Cookies,检查目标 Cookie 的 Path 列 是否是你设置的值(如
/admin) - 跳转到
/admin页面,执行console.log(document.cookie)→ 应看到该 Cookie(前提是没设 HttpOnly) - 再跳到
/public页面执行同样语句 → 应看不到(若还出现,说明旧 Cookie 未清除或 Path 设置错误) - Network 标签中点一个
/admin/user请求 → 查看 Request Headers → Cookie 字段是否包含它
常见踩坑点
Path 隔离失效,往往不是逻辑错,而是细节疏忽:
- Path=admin(缺开头斜杠)→ 浏览器忽略,退回到默认 Path,极易误判
- Path=/api/ 和 Path=/api 效果一致,末尾斜杠不影响匹配
- 修改 Path 后,同名旧 Cookie 仍存在 → 需先用
Path=原路径; Max-Age=0删除,再设新值 - Path 不能防 XSS:敏感数据必须加 HttpOnly,Path 只缩小服务端接收范围
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











