今天遇到一个cookie的问题: 名叫username
的,域为localhost
的cookie
无法删除,导致用户登录以后无法退出。搞了半天终于发现问题所在:原来是我关于cookie的基础知识没搞清楚 。。。。
Cookie不仅仅有名字和值两个属性,还有域(domain
),过期时间(expires
),路径(path
)等属性。 其中,不同的域、不同的路径下可以存在同样名字的cookie。
一般我们删除cookie的方法是用一个同样名字、过期时间为过去某个时候的Cookie覆盖之。 这时就一定要搞清楚你要删除的cookie的域和路径,Cookie域和路径要一样才能被覆盖。 否则产生的效果就是那个想要被删除的Cookie具有神奇的生命力,无法被清除~~~
找到expires
后设置为过期,切记设置domain
和path
,只有这两个参数跟你要删除的参数完全一样才能把它删除掉
只要用以下的方式清除cookie就可以了:
function deleteCookie(name) {
let date=new Date();
date.setTime(date.getTime()-10000); // 当前时间减去10000,确保已过期
document.cookie=name+"=; domain=localhost; expire="+date.toGMTString()+"; path=/";
}
注意:domain一定要和设置时相同,如果在设置cookie时未指定 domain ,删除时也将domain设为空值,代码如下
function deleteCookie(name) {
let date=new Date();
date.setTime(date.getTime()-10000); // 当前时间减去10000,确保已过期
document.cookie=name+"=; domain=; expire="+date.toGMTString()+"; path=/";
}