js 刪除 cookie

http://www.cnblogs.com/gossip/archive/2011/12/06/2278282.html

http://zhidao.baidu.com/question/99514274.html


path exprie 等問題:


項目中使用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[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;
}

 

後來發現這個網址,介紹了無法刪除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屬性就行了



JS 如何 刪除 一條 cookie?

檢舉|2009-05-31 15:43提問者: fangshuitian |瀏覽次數:7464次
如何在不關閉瀏覽器的情況下刪除一條COOKIE?
設置過期時間是沒有用的,不能即時刪除,只能靠關閉瀏覽器後自動消失。即時刪除,就是說執行之後馬上用document.cookie訪問,就已經找不到了。就是說直接從內存裏清除。

問題補充:

貌似我這個問題很難啊。我自己也在網上找過了的。誰要是答對了,加100分。
我來幫他解答
滿意回答
2009-06-01 12:55
js讀取cookie,js添加cookie,js刪除cookie,2008-09-26 10:02示例如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>cookie處理函數練習(爲我所寫,非我所想:改善面向對象)</title>
<script language="JavaScript" type="text/javascript">
function addCookie(objName,objValue,objHours){//添加cookie
   var str = objName + "=" + escape(objValue);
   if(objHours > 0){//爲0時不設定過期時間,瀏覽器關閉時cookie自動消失
    var date = new Date();
    var ms = objHours*3600*1000;
    date.setTime(date.getTime() + ms);
    str += "; expires=" + date.toGMTString();
   }
   document.cookie = str;
   alert("添加cookie成功");
}

function getCookie(objName){//獲取指定名稱的cookie的值
   var arrStr = document.cookie.split("; ");
   for(var i = 0;i < arrStr.length;i ++){
    var temp = arrStr[i].split("=");
    if(temp[0] == objName) return unescape(temp[1]);
   } 
}

function delCookie(name){//爲了刪除指定名稱的cookie,可以將其過期時間設定爲一個過去的時間
   var date = new Date();
   date.setTime(date.getTime() - 10000);
   document.cookie = name + "=a; expires=" + date.toGMTString();
}

function allCookie(){//讀取所有保存的cookie字符串
   var str = document.cookie;
   if(str == ""){
    str = "沒有保存任何cookie";
   }
   alert(str);
}

function $(m,$False$n){
   return document.forms[m].elements[n].value;
}

function add_(){
   var cookie_name = $("myform","cookie_name");
   var cookie_value = $("myform","cookie_value");
   var cookie_expireHours = $("myform","cookie_expiresHours");
   addCookie(cookie_name,cookie_value,cookie_expireHours);
}

function get_(){
   var cookie_name = $("myform","cookie_name");
   var cookie_value = getCookie(cookie_name);
   alert(cookie_value);
}

function del_(){
   var cookie_name = $("myform","cookie_name");
   delCookie(cookie_name);
   alert("刪除成功");
}
</script>

</head>
<body>
<form name="myform">
   <div><label for="cookie_name">名稱</label><input type="text" name="cookie_name" /></div>
   <div><label for="cookie_value">值</lable><input type="text" name="cookie_value" /></div>
   <div><label for="cookie_expireHours">多少個小時過期</lable><input type="text" name="cookie_expiresHours" /></div>
   <div>
    <input type="button" value="添加該cookie" onclick="add_()" />
    <input type="button" value="讀取所有cookie" onclick="allCookie()" />
    <input type="button" value="讀取該名稱cookie" onclick="get_()" />
    <input type="button" value="刪除該名稱cookie" onclick="del_()" />
   </div>
</form>
<hr />
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章