当前位置:  开发笔记 > 编程语言 > 正文

使用JavaScript清除所有cookie

如何解决《使用JavaScript清除所有cookie》经验,为你挑选了8个好方法。

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



1> Robert J. Wa..:
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标志集的cookie ,因为该HttpOnly标志禁用了Javascript对cookie的访问.

它不会删除已使用Path值设置的cookie .(尽管这些cookie会出现在这里document.cookie,但是如果没有指定Path与其设置相同的值,则无法删除它.)


谨防!如果您的cookie配置为使用路径或域组件,则此便捷代码段将无法使用.
很好,但经过实验,我发现一个网站只有一个没有=的cookie,然后它是一个无名的cookie,你实际得到它的价值.因此,如果eqPos == 1,你应该改为`name =""`来擦除无名值.
如何修改以包含路径或域信息?
这个答案是10岁,不起作用.
至少在Chrome中cookie被";"分隔,所以我们必须`trim()`额外的空格或`split(';')`(用';')来使它正常工作.我提出了一个编辑.

2> Craig Smedle..:

一个班轮

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

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



3> AnthonyVO..:

在我自己有点沮丧之后,我将这个函数组合在一起,它将尝试从所有路径中删除一个命名的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进行修改.

4> Jan..:

这里有一个清除所有路径和域的所有变体(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();
        }
    }
})();


这应该是最好的答案

5> jichi..:

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

for (var it in $.cookie()) $.removeCookie(it);



6> ConroyP..:

据我所知,没有办法彻底删除域上的任何cookie集.如果您知道名称并且脚本与cookie位于同一域中,则可以清除cookie.

您可以将值设置为空,将过期日期设置为过去的某个位置:

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

这里有一篇关于使用javascript操纵cookie 的优秀文章.


你也可以只做`document.cookie ="username; expires ="+ new Date(0).toGMTString()` - 如果cookie在1秒前或1970年到期,差别不大

7> Dinesh..:

简单.快点.

function deleteAllCookies() {
 var c = document.cookie.split("; ");
 for (i in c) 
  document.cookie =/^[^=]+/.exec(c[i])[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";    
}


不处理路径.

8> Jacob David ..:

答案受到第二个答案和W3Schools的影响

document.cookie.split(';').forEach(function(c) {
  document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});

似乎工作

编辑:哇几乎和Zach一样有趣,Stack Overflow如何将它们放在一起.

编辑:显然是临时的nvm

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有