如何使用JavaScript删除当前域的所有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 + ';';
    }
}

不同的浏览器有不同的行为,但这对我来说是有效的。 享受。

其他回答

document.cookie.split(";").forEach(function(c) { 
    document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); 
});
//clearing local storage
localStorage.clear();

你可以通过查看文档得到一个列表。饼干变量。清除它们只是一个循环遍历所有它们并一个一个地清除它们的问题。

这对我来说很管用:

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();
}

一个衬套

以防你想快速粘贴进去…

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;';  
}