同一域名下不同path下通过js中获取域名下的cookie,拿不到cookie值

时间:2024-04-09 20:46:02

在前端开发过程中通过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同一设置成 / 

如下图

同一域名下不同path下通过js中获取域名下的cookie,拿不到cookie值

 

所以对应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同一设置成 /