在前端开发过程中通过js设置/获取cookie,有时候会碰到这个问题
域名:abc.com
通过以下代码设置cookie
var date=new Date(); //获取当前时间
var expiresDays=time; //将date设置为n天以后的时间
date.setTime(date.getTime()+expiresDays*24*3600*1000); //格式化为cookie识别的时间
document.cookie=key + "=" + val +";expires="+date.toGMTString();
路径1: abc.com/shop/
路径2:abc.com/list/
通过以下代码获取
function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
在整个js设置、读取cookie的过程中都没有问题,但是会出现在路径1下设置的cookie在路径2下通过js是获取不到的情况
这个问题产生的原因就是因为浏览器是根据域名+目录来确定最后要取的cookie对应的具体位置
就跟我们后端开发java里面的命名空间是一样的,不同的path(不同命名空间)可以存在名称相同的cookie(class),并且值也是不一样的
具体实例看下京东/天猫的解决方式,就是所有cookie对应的path同一设置成 /
如下图
所以对应cookie的设置方法调整如下
function SetCookie(name, value) {
var exp = new Date();
exp.setTime(exp.getTime() + 3 * 24 * 60 * 60 * 1000); //3天过期
document.cookie = name + "=" + encodeURIComponent(value) + ";expires=" + exp.toGMTString()+";path=/";
return true;
};
在SetCookie方法中直接将path同一设置成 /