JS 没法清除Cookie的解决方法

JS 没法清除Cookie的解决方法

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

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

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

 

下面是我到网上找的清除Cookie的方法,始终都没法删除Cookie浏览器

  一、传递Cookie名称cookie

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

二、循环删除全部Cookiethis

// 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[i].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;
}spa

 

后来发现这个网址,介绍了没法删除Cookie的缘由code

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

 今天遇到一个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属性就好了

相关文章
相关标签/搜索