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" οnclick="add_()" />
    <input type="button" value="读取所有cookie" οnclick="allCookie()" />
    <input type="button" value="读取该名称cookie" οnclick="get_()" />
    <input type="button" value="删除该名称cookie" οnclick="del_()" />
   </div>
</form>
<hr />
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值