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屬性就好了

相關文章
相關標籤/搜索