如何使用JavaScript删除当前域的所有cookie ?
当前回答
如果你只关心清除安全源上的Cookie,你可以使用Cookie Store API和它的.delete()方法。
cookieStore.getAll().then(cookies => cookies.forEach(cookie => {
console.log('Cookie deleted:', cookie);
cookieStore.delete(cookie.name);
}));
访问caniuse.com表,查看Cookie Store API的浏览器支持情况。
其他回答
一个衬套
以防你想快速粘贴进去…
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
和bookmarklet的代码:
javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
我不知道为什么第一次投票的答案对我没用。
正如这个答案所说:
没有100%的方法可以删除浏览器cookie。 问题在于,cookie不仅是由它们的键“名称”唯一标识的,而且还由它们的“域”和“路径”唯一标识。 如果不知道cookie的“域”和“路径”,就不能可靠地删除它。通过JavaScript的document.cookie无法获得此信息。它也不能通过HTTP Cookie报头使用!
所以我的想法是添加一个Cookie版本控制,包括设置,获取,删除Cookie:
var cookie_version_control = '---2018/5/11';
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name+cookie_version_control + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name+cookie_version_control + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
function removeCookie(name) {
document.cookie = name+cookie_version_control+'=; Max-Age=-99999999;';
}
你可以通过查看文档得到一个列表。饼干变量。清除它们只是一个循环遍历所有它们并一个一个地清除它们的问题。
我发现IE和Edge有问题。Webkit浏览器(Chrome, safari)似乎更宽容。当设置cookie时,总是将“路径”设置为某个内容,因为默认将是设置cookie的页面。因此,如果你试图在不同的页面上过期,而没有指定“路径”,路径将不匹配,它将不会过期。该文档。Cookie值不会显示Cookie的路径或过期时间,因此您无法通过查看该值推导出Cookie的设置位置。
如果您需要从不同页面过期cookie,请在cookie值中保存设置页面的路径,以便稍后将其取出或始终附加“;Path =/;"到cookie值。然后它将从任何页面过期。
function deleteAllCookies() {
const cookies = document.cookie.split(";");
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i];
const eqPos = cookie.indexOf("=");
const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
}
注意,这段代码有两个限制:
它不会删除设置了HttpOnly标志的cookie,因为HttpOnly标志禁止Javascript访问cookie。 它不会删除已设置为Path值的cookie。(尽管这些cookie会出现在文档中。cookie,但你不能删除它没有指定相同的路径值,它是设置。)