使用 JavaScript 清除所有 cookie

IT技术 javascript cookies
2021-01-31 18:13:42

如何使用 JavaScript 删除当前域的所有 cookie?

6个回答
function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

请注意,此代码有两个限制:

  • 它不会删除HttpOnly设置了HttpOnly标志的 cookie ,因为该标志会禁用 Javascript 对 cookie 的访问。
  • 它不会删除已设置了Path值的cookie (尽管这些 cookie 会出现在 中document.cookie,但如果不指定与设置相同的Path值,就无法删除它。)
这将如何修改以包含路径或域信息?
2021-03-23 18:13:42
不错,但是经过试验,我发现一个站点可以只有一个cookie,没有=,那么它就是一个无名cookie,你实际上得到了它的value。因此,如果 eqPos == 1,您应该name = ""改为删除无名值。
2021-03-25 18:13:42
谨防!如果您的 cookie 被配置为使用路径或域组件,这个方便的代码段将不起作用。
2021-03-26 18:13:42
真的。可以修改该片段以询问您这些详细信息;但这适用于大多数情况。
2021-03-31 18:13:42
至少在 Chrome 中 cookie 是由“;”分隔的,因此我们必须trim()额外的空间或split('; ')(由 '; ')以使其正常工作。我提出了一个编辑。
2021-03-31 18:13:42

一个班轮

如果您想快速粘贴它...

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

和书签的代码:

javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
官方的回答带有2个限制,这是否回答解决这些问题?
2021-03-24 18:13:42
一些持续性的网站备份饼干localStorage这样window.localStorage.clear()可能会有所帮助,以及
2021-04-01 18:13:42
这个解决了我的饼干问题。谢谢:弓:
2021-04-06 18:13:42

这是清除所有路径和域的所有变体(www.mydomain.com、mydomain.com 等)中的所有 cookie 的方法:

(function () {
    var cookies = document.cookie.split("; ");
    for (var c = 0; c < cookies.length; c++) {
        var d = window.location.hostname.split(".");
        while (d.length > 0) {
            var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
            var p = location.pathname.split('/');
            document.cookie = cookieBase + '/';
            while (p.length > 0) {
                document.cookie = cookieBase + p.join('/');
                p.pop();
            };
            d.shift();
        }
    }
})();
这对我来说也比接受的答案要好得多。谢谢
2021-03-14 18:13:42
这应该是最好的答案
2021-03-28 18:13:42
杰出的!在尝试了在我的开发服务器上但不在生产服务器上运行的其他几个之后,这是第一个同时在这两个服务器上工作的。纯金!
2021-04-06 18:13:42
这个在 chrome 中对我有用,而接受的答案却没有
2021-04-07 18:13:42
必须为带有前导点的域添加代码,我的一些 cookie 有它,有些没有,即使没有相关的子域。但是通过这些更改,它对我来说效果很好,这是我迄今为止尝试过的最完整的实现。
2021-04-09 18:13:42

在我自己对此感到有点沮丧之后,我将这个函数组合在一起,它将尝试从所有路径中删除一个命名的 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 + ';';
    }
}

一如既往,不同的浏览器有不同的行为,但这对我有用。享受。

这仍然不会删除 httpOnly cookie。它们只能通过 HTTP 修改。
2021-03-18 18:13:42
@TomHammond,这应该是一个全新的问题。主要问题围绕托管域与托管域以及您控制托管页面的能力有关。
2021-04-07 18:13:42

如果您有权访问jquery.cookie插件,则可以通过以下方式清除所有 cookie:

for (var it in $.cookie()) $.removeCookie(it);
jichi 您是否将 jquery 库与 jquery.cookie 插件一起包含在内?
2021-03-28 18:13:42
我只是在我自己的网站上尝试过,它删除了所有 cookie。@Cerin sama 可以尝试在清除 cookie 之前和之后在控制台中执行以下代码吗?"for (var it in $.cookie()) console.log(it);"
2021-03-30 18:13:42