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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码者人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值