2024年2月26日发(作者:)

项目中使用时,需要在登录时清除Cookie,而sdmenu默认是会保存Cookie的

下面是保存Cookie的方法

= "sdmenu_" + encodeURIComponent() + "=" + ("") + "; expires=" + tring() + "; path=/";

下面是我到网上找的清除Cookie的方法,始终都无法删除Cookie

1、传递Cookie名称

function deleteCookie(name){

var date=new Date();

e(e()-10000);

=name+"=v; expire="+tring()+"; path=/";

2、循环删除所有Cookie

// js 遍历所有Cookie

function foreach()

{

var strCookie=;

var arrCookie=("; "); // 将多cookie切割为多个名/值对

for(var i=0;i <;i++)

{ // 遍历cookie数组,处理每个cookie对

var arr=arrCookie[i].split("=");

if(>0)

DelCookie(arr[0]);

}

}

function GetCooki(offset)

{

var endstr = f (";", offset);

if (endstr == -1)

endstr = ;

return decodeURIComponent(ing(offset, endstr));

}

function DelCookie(name)

{

var exp = new Date();

e (e() - 1);

var cval = GetCookie (name);

= name + "=" + cval + "; expires="+ tring();

}

function GetCookie(name)

{

var arg = name + "=";

var alen = ;

var clen = ;

var i = 0;

while (i < clen)

{

var j = i + alen;

if (ing(i, j) == arg)

return GetCooki (j);

i = f(" ", i) + 1;

if (i == 0) break;

}

return null;

}

后来发现这个网址,介绍了无法删除Cookie的原因

/blog/delete-cookie/

今天遇到一个cookie的问题: 名叫username的,域为的cookie无法删除,导致用户登录以后无法退出。搞了半天终于发现问题所在:原来是我关于cookie的基础知识没搞清楚 。。。。

Cookie不仅仅有名字和值两个属性,还有域(domain),过期时间(expires),路径(path)等属性。 其中,不同的域、不同的路径下可以存在同样名字的cookie。 比如这个页面: 用鼠标戳我

一般我们删除cookie的方法是用一个同样名字、过期时间为过去某个时候的Cookie覆盖之。 这时就一定要搞清楚你要删除的cookie的域和路径,Cookie域和路径要一样才能被覆盖。 否则产生的效果就是那个想要被删除的Cookie具有神奇的生命力,无法被清除~~~

另外,我发现在设置Cookie的时候,如果没有指定域名,那么设置的这个cookie的域默认为当前域,比如。 如果设置的时候指定了某个域,那么浏览器存的时候会自动在前面加.。比如PHP代码: setcookie('test','a',0,''); 那么 浏览器里面存的Cookie的域为.。 所以,最好的方式是设置Cookie的时候怎么写的,删除的时候就怎么写。 要不就会出现我遇到的情况:

明明浏览器里看有 username=longbill,域为的Cookie,但是在php里写setcookie('username','',time()-1000,'','/'); 无法删除那个Cookie。 原因就是我删Cookie的操作其实上是发了一个新的名叫username、值为空、过期时间为过去1000秒、域为.、路径为/的Cookie。这个Cookie发到浏览器马上就过期了,什么也看不到。而我要删除的在/上的cookie还活的好好的。。。

原来是删除Cookie的代码中没有加 路径(path)

原:

= "sdmenu_" + encodeURIComponent() + "=" + ("") + "; expires=" + tring() + "; path=/";

新:

var date=new Date();

e(e()-10000);

=name+"=v; expire="+tring()+"; path=/";

除了路径(path),可能还有域等其它情况,保险的方式就是 设置Cookie时是什么样式,删除时就应该是什么样式,加上expire属性就行了