1.前段时间和后台同事刷新微信token时,发现token一直取不到,后台同事把token写到cookie里面去了,前端的所有请求都要带上token,而前端去到其他页面调取api的时候一直取不到token,cookie里面没有保存token;这就奇怪了,明明服务器已经把token写到浏览器cookie里面去了,但是其他页面一直取不到。
后来发现我分享出去的页面路径是/k98/shareNew,而服务器设置cookie的时候没有设置path这个字段,那cookie就会被默认设置到当前的访问路径,/k98/shareNew里面,其他页面就没有cookie了,后来网上查了一些cookie的资料:
domain 和 path
domain是域名,path是路径,两者加起来就构成了 URL,domain和path一起来限制 cookie 能被哪些 URL 访问。
一句话概括:某cookie的 domain为“baidu.com”, path为“/ ”,若请求的URL(URL 可以是js/html/img/css资源请求,但不包括 XHR 请求)的域名是“baidu.com”或其子域如“api.baidu.com”、“dev.api.baidu.com”,且 URL 的路径是“/ ”或子路径“/home”、“/home/login”,则浏览器会将此 cookie 添加到该请求的 cookie 头部中。
所以domain和path2个选项共同决定了cookie何时被浏览器自动添加到请求头部中发送出去。如果没有设置这两个选项,则会使用默认值。domain的默认值为设置该cookie的网页所在的域名,path默认值为设置该cookie的网页所在的目录。
这句话就是解决我们问题的关键:path默认值为设置该cookie的网页所在的目录,最后服务器每一个cookie都设置了路径字段path:'/'