Cookie的path和domain必须显式指定且严格匹配,否则跨路径或子域无法读取或删除;path须以/开头(如path=/),domain需带前导点(如domain=.example.com),删除时path和domain必须与写入时完全一致。
必须显式指定 path 和 domain,否则默认作用域极窄,跨路由或子域基本读不到。
浏览器默认把 document.cookie = "token=abc" 写入当前完整路径(比如 /admin/user),不是根路径。这意味着:
/admin/user 页面写的 token,到了 /api/login 就读不到path=/(整个站点可读)或 path=/api/(仅限该前缀路径)path 必须以 / 开头,写成 path=api/ 会被忽略或解释为相对路径,不可靠要让 app.example.com 和 api.example.com 共享同一个 Cookie,domain 必须设为 .example.com(开头带点):
domain=example.com(没点)→ 只匹配精确域名,不覆盖子域domain=.example.com(有点)→ 匹配 example.com 及所有子域(www、api、app 等)domain=www.example.com → 仅限该子域,且无法被其他子域读取localhost 时,domain 属性会被浏览器忽略,此时只能靠 path 控制范围删除失败的最常见原因:删的时候没复刻当初写的 path 和 domain。
立即学习“前端免费学习笔记(深入)”;
document.cookie = "token=abc; path=/api/; domain=.example.com"
document.cookie = "token=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/api/; domain=.example.com"
path → 只在当前路径(如 /)删,原 /api/ 下的还在domain 少了点(写成 example.com)→ 浏览器认为是另一个 Cookie,删不掉真正麻烦的不是写,而是删——路径和域名必须一字不差,连开头那个点都不能少。很多人卡在这一步,反复刷新还看到旧 Cookie,其实只是删错了地方。