如何使用JavaScript删除当前域的所有cookie?
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
与其设置相同的值,则无法删除它.)
如果你想快速粘贴它...
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=/"); }); })();
在我自己有点沮丧之后,我将这个函数组合在一起,它将尝试从所有路径中删除一个命名的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 + ';'; } }
一如往常不同的浏览器有不同的行为,但这对我有用.请享用.
这里有一个清除所有路径和域的所有变体(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(); } } })();
如果您有权访问jquery.cookie插件,则可以通过以下方式删除所有cookie:
for (var it in $.cookie()) $.removeCookie(it);
据我所知,没有办法彻底删除域上的任何cookie集.如果您知道名称并且脚本与cookie位于同一域中,则可以清除cookie.
您可以将值设置为空,将过期日期设置为过去的某个位置:
var mydate = new Date(); mydate.setTime(mydate.getTime() - 1); document.cookie = "username=; expires=" + mydate.toGMTString();
这里有一篇关于使用javascript操纵cookie 的优秀文章.
简单.快点.
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"; }
答案受到第二个答案和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