删除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();