如何使用JavaScript删除当前域的所有cookie ?
当前回答
这对我来说很管用:
function deleteCookie(name) {
document.cookie =
`${name}=; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/`;
// Remove it from local storage too
window.localStorage.removeItem(name);
}
function deleteAllCookies() {
const cookies = document.cookie.split("; ");
cookies.forEach((cookie) => {
const name = cookie.split("=").shift();
this.deleteCookie(name);
});
// Some sites backup cookies in `localStorage`
window.localStorage.clear();
}
其他回答
如果你想使用js-cookie npm包并按名称删除cookie:
import cookie from 'js-cookie'
export const removeAllCookiesByName = (cookieName: string) => {
const hostParts = location.host.split('.')
const domains = hostParts.reduce(
(acc: string[], current, index) => [
...acc,
hostParts.slice(index).join('.'),
],
[]
)
domains.forEach((domain) => cookie.remove(cookieName, { domain }))
}
我发现IE和Edge有问题。Webkit浏览器(Chrome, safari)似乎更宽容。当设置cookie时,总是将“路径”设置为某个内容,因为默认将是设置cookie的页面。因此,如果你试图在不同的页面上过期,而没有指定“路径”,路径将不匹配,它将不会过期。该文档。Cookie值不会显示Cookie的路径或过期时间,因此您无法通过查看该值推导出Cookie的设置位置。
如果您需要从不同页面过期cookie,请在cookie值中保存设置页面的路径,以便稍后将其取出或始终附加“;Path =/;"到cookie值。然后它将从任何页面过期。
这是一个简单的代码删除所有的JavaScript cookie。
function deleteAllCookies(){
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
deleteCookie(cookies[i].split("=")[0]);
}
function setCookie(name, value, expirydays) {
var d = new Date();
d.setTime(d.getTime() + (expirydays*24*60*60*1000));
var expires = "expires="+ d.toUTCString();
document.cookie = name + "=" + value + "; " + expires;
}
function deleteCookie(name){
setCookie(name,"",-1);
}
执行deleteAllCookies()函数清除所有cookie。
在经历了一些挫折之后,我自己拼凑了这个函数,它将尝试从所有路径中删除一个命名的cookie。只需为每个cookie调用这个函数,就可以更接近于删除每个cookie。
function eraseCookieFromAllPaths(name) {
// This function will attempt to remove a cookie from all paths.
var pathBits = location.pathname.split('/');
var pathCurrent = ' path=';
// do a simple pathless delete first.
document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';
for (var i = 0; i < pathBits.length; i++) {
pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
}
}
不同的浏览器有不同的行为,但这对我来说是有效的。 享受。
这个答案受到第二个答案和W3Schools的影响
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
似乎有效果
编辑:哇,几乎和扎克的Stack Overflow把它们放在一起的有趣方式一模一样。
编辑:NVM显然是暂时的