删除cookie之js实现

删除cookie原理

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie来覆盖原来Cookie。


将maxAge设置为0,覆盖原来的Cookie属性值。注意是0而不是负数。负数代表其他的意义。


注意:只需判断cookie的name是否匹配就能验证cookie是否存在了。如果要更新cookie,除了设置相同的名字外,还要设置相同的域和path名,因为拿到的cookie只有name 和 value,如果不设置域和path值,则会默认当前路径和域,存另外一份Cookie。(而我们下面的解决办法中,因为本来setCookie没有设置域和path,所以更新时并不需要重新设置,都采用默认当前路径和域)

 

如何删除Cookie?

max-age:如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效;如果设置为0,则立即删除该Cookie。

expiress:设置为当前时间之前的时间,即可立即删除该cookie

 

那么如果有多个cookie呢?

cookie结构:cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。

我们用循环每个cookie设置expiress属性来删除(设置maxAge也可以):

// 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;
		}
		foreach();

 


版权声明:本文为qq_36470686原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。