Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 996|回复: 0

JS 无法清除Cookie的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 802 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726006
    发表于 2021-7-11 15:29:36 | 显示全部楼层 |阅读模式

    JS 无法清除Cookie的解决方法

     

    项目中使用sdmenu.js时,需要在登录时清除Cookie,而sdmenu默认是会保存Cookie的

     下面是sdmenu.js保存Cookie的方法

    document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";

     

    下面是我到网上找的清除Cookie的方法,始终都无法删除Cookie

      1、传递Cookie名称

    function deleteCookie(name){          

    var date=new Date();          

    date.setTime(date.getTime()-10000);          

    document.cookie=name+"=v; expire="+date.toGMTString()+"; path=/";

    }

    2、循环删除所有Cookie

    // js 遍历所有Cookie

    function foreach()

    {

        var strCookie=document.cookie;  

        var arrCookie=strCookie.split("; "); // 将多cookie切割为多个名/值对  

        for(var i=0;i <arrCookie.length;i++)// 遍历cookie数组,处理每个cookie对    

      {   var arr=arrCookie.split("=");    

          if(arr.length>0)    

            DelCookie(arr[0]);

       }  

    }

    function GetCooki(offset)

    { var endstr = document.cookie.indexOf (";", offset);

        if (endstr == -1)

              endstr = document.cookie.length;

              return decodeURIComponent(document.cookie.substring(offset, endstr));

    }

    function DelCookie(name)

    {

       var exp = new Date();

       exp.setTime (exp.getTime() - 1);

       var cval = GetCookie (name);

       document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();

    }
    function GetCookie(name)

    { var arg = name + "=";

       var alen = arg.length;

       var clen = document.cookie.length;

       var i = 0; while (i < clen)

      { var j = i + alen;

         if (document.cookie.substring(i, j) == arg)

              return GetCooki (j);

         i = document.cookie.indexOf(" ", i) + 1;

         if (i == 0)

            break;

       }

       return null;

    }

     

    后来发现这个网址,介绍了无法删除Cookie的原因

    http://php.js.cn/blog/delete-cookie/

     今天遇到一个cookie的问题: 名叫username的,域为www.umiwi.com的cookie无法删除,导致用户登录以后无法退出。搞了半天终于发现问题所在:原来是我关于cookie的基础知识没搞清楚 。。。。

        Cookie不仅仅有名字和值两个属性,还有域(domain),过期时间(expires),路径(path)等属性。 其中,不同的域、不同的路径下可以存在同样名字的cookie。 比如这个页面:  用鼠标戳我

        一般我们删除cookie的方法是用一个同样名字、过期时间为过去某个时候的Cookie覆盖之。 这时就一定要搞清楚你要删除的cookie的域和路径,Cookie域和路径要一样才能被覆盖。 否则产生的效果就是那个想要被删除的Cookie具有神奇的生命力,无法被清除~~~

        另外,我发现在设置Cookie的时候,如果没有指定域名,那么设置的这个cookie的域默认为当前域,比如www.umiwi.com。 如果设置的时候指定了某个域,那么浏览器存的时候会自动在前面加.。比如PHP代码: setcookie('test','a',0,'www.umiwi.com');  那么 浏览器里面存的Cookie的域为.www.umiwi.com。 所以,最好的方式是设置Cookie的时候怎么写的,删除的时候就怎么写。  要不就会出现我遇到的情况: 明明浏览器里看有 username=longbill,域为www.umiwi.com的Cookie,但是在php里写 setcookie('username','',time()-1000,'www.umiwi.com','/'); 无法删除那个Cookie。 原因就是我删Cookie的操作其实上是发了一个新的名叫username、值为空、过期时间为过去1000秒、域为.www.umiwi.com、路径为/的Cookie。这个Cookie发到浏览器马上就过期了,什么也看不到。而我要删除的在http://www.umiwi.com/上的cookie还活的好好的。。。

     

     

     

    原来是删除Cookie的代码中没有加 路径(path)

    原:

    document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";

    新:

             var date=new Date();           date.setTime(date.getTime()-10000);           document.cookie=name+"=v; expire="+date.toGMTString()+"; path=/";

    除了路径(path),可能还有域等其它情况,保险的方式就是 设置Cookie时是什么样式,删除时就应该是什么样式,加上expire属性就行了

     

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-15 07:40 , Processed in 0.066847 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表