正确使用 cookie 的 path

本文详细介绍了cookie的路径属性path,包括其使用规范、大小写敏感性、不可读性及权限继承性等内容,并提供了具体的示例代码。

cookie 有路径--path,表示哪些路径下的文件有权限读取该 cookie。

path 应该以 "/" 结尾,同名 cookie,不同 path,属不同的 cookie

document.cookie = "N1=1; path=/path/";
document.cookie = "N1=2; path=/path";
document.cookie = "N1=3; path=path/";

如上代码,前两句使用的是绝对路径,即相对于站点根目录的网页目录,第三句使用的是相对路径,相对于当前目录的。

第一句和第二句在于结尾不同,虽然他们所表达的权限相同,但是由于 path 字符串不同,会形成两个同名的 cookie,容易造成混乱,我们建议不要使用第二句这种格式,因为系统默认也是以 "/" 结尾的。

所以如上述是三个 cookie,之间不会相互覆盖。

path 属性值有大小写之分,应与浏览器中的地址栏的输入一致

document.cookie = "N1=1; path=/path/";
document.cookie = "N1=2; path=/paTH/";

这是两个不同的 cookie,因为 path 属性值大小写不同,如果我们在地址栏输入的是 path,那么就读取第一个 N1,如果我们输入的是 paTH,那么就读取第二个 N1

path 不可读

同 expires 一样,path 只可写,不可读。

path 不可更改

同 expires 不一样,如果我们试图更改 path,那么实际上我们是另外写了一个 cookie,而不是更改了 path 值。

path 权限有继承性

假如指定了 /test/ 目录有权限读取某 cookie,那么 /test/ 之下的目录 /test/t/ 也有权限读取该 cookie。

<think>嗯,用户这次聚焦在cookiepath属性设置上,看来是遇到了具体的开发需求。此前用户询问过cookie的通用操作,这次明显更深入了,可能正在处理多路径下的身份验证问题。 技术层面需要拆解三个核心点:设置方法(前端/后端)、路径作用域的逻辑、常见陷阱。尤其要注意浏览器同源策略中路径的微妙之处——比如https://example.com/app和https://example.com/dashboard两个路径下的cookie隔离场景。 用户虽然没有明说,但提"注意事项"时应该担心的是安全风险。得强调Secure和HttpOnly属性的组合使用,特别是涉及身份凭证时。上次回复被用户认可的引用形式可以复用,这次补充OWASP的相关建议。 突然想到个易错点:当path=/api时,https://example.com/api/v1和https://example.com/api/v2实际会共享cookie,这点很多开发者会误解。要在示例里演示这种边界情况。 用户用"可能包括"的措辞说明还在探索阶段,可以预判后续问题。比如单页应用部署在子路径时的配置,或者CDN缓存对路径型cookie的影响,这些都可以埋入相关问题的钩子。 </think>使用Cookie的`path`属性可精确控制其在服务器路径下的可见性,以下是关键信息总结: ### 一、设置方法 1. **前端JavaScript** ```javascript document.cookie = "user_token=abc123; path=/admin; Secure; HttpOnly"; ``` - `/admin`:仅该路径及子路径可访问(如`/admin/dashboard`) - `Secure`:仅HTTPS传输 - `HttpOnly`:禁止JavaScript访问 2. **后端示例(Python Flask)** ```python resp = make_response("Login success") resp.set_cookie("session_id", "xyz789", path="/app", secure=True, httponly=True) ``` ### 二、核心作用场景 1. **路径隔离** - 路径`/shop`的Cookie不会发送到`/blog` - 避免不同模块的Cookie冲突(如后台`/admin`与用户`/home`) 2. **安全限制** - 敏感Cookie(如登录态)限定在`/account`路径,降低XSS攻击暴露风险[^1] 3. **多应用托管** 同一域名托管多个应用时(如`/app1`和`/app2`),通过Path隔离Cookie ### 三、关键注意事项 1. **路径匹配规则** - 设`path=/news`时: ✅ 匹配:`/news/latest`、`/news/2023` ❌ 不匹配:`/blog`、根路径`/` 2. **优先级冲突** - 同名Cookie按**最长路径优先** ```http Set-Cookie: cart_id=A; path=/ Set-Cookie: cart_id=B; path=/shop ``` - 访问`/shop`时:使用`cart_id=B` - 访问`/blog`时:使用`cart_id=A` 3. **浏览器差异** - Chrome/Firefox:路径区分大小写 (`/Admin ≠ /admin`) - Safari:路径不区分大小写[^2] 4. **删除限制** - 删除Cookie需匹配**相同路径/域名** ```javascript // 无效删除(路径不匹配) document.cookie = "cart_id=; expires=Thu, 01 Jan 1970 00:00:00 GMT"; // 正确删除 document.cookie = "cart_id=; path=/shop; expires=Thu, 01 Jan 1970 00:00:00 GMT"; ``` ### 四、最佳实践 1. **最小权限原则** - 后台管理Cookie设`path=/admin`而非根路径 - 支付模块Cookie限定`path=/checkout` 2. **敏感Cookie加固** ```http Set-Cookie: auth_key=***; path=/; Secure; HttpOnly; SameSite=Lax ``` 3. **路径标准化** - 统一使用小写路径(避免浏览器兼容问题) - 子应用部署时显式声明路径(如`path=/subapp`) > 路径隔离虽提升安全性,但无法替代CSRF防护(仍需同步令牌或SameSite Cookie)[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值