用JavaScript清除所有的cookies
如何使用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=/"); });
和书签的代码:
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 + ';'; } }
一如既往不同的浏览器有不同的行为,但这对我有效。 请享用。
如果你有权访问jquery.cookie插件,你可以这样擦除所有的cookies:
for (var it in $.cookie()) $.removeCookie(it);
这里是一个清除所有路径和域名(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(); } } })();
据我所知,没有办法一揽子删除域上设置的任何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"; }
您可以通过查看document.cookie变量来获取列表。 清除它们全部只是循环遍历所有这些并逐个清除它们的问题。
想象我会分享这个方法来清除cookie。 也许这可能对别人有帮助。
var cookie = document.cookie.split(';'); for (var i = 0; i < cookie.length; i++) { var chip = cookie[i], entry = chip.split("="), name = entry[0]; document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;'; }
一个答案影响的第二个答案在这里和W3Schools
document.cookie.split(';').forEach(function(c) { document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;'; });
似乎正在工作
编辑:哇几乎完全一样Zach的有趣的如何堆栈溢出把他们相邻。
编辑:nvm显然是暂时的
这里有一个简单的代码来删除JavaScript中的所有Cookie 。
function deleteAllCookies(){ var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) deleteCookie(cookies[i].split("=")[0]); } function setCookie(name, value, expirydays) { var d = new Date(); d.setTime(d.getTime() + (expirydays*24*60*60*1000)); var expires = "expires="+ d.toUTCString(); document.cookie = name + "=" + value + "; " + expires; } function deleteCookie(name){ setCookie(name,"",-1); }
运行函数deleteAllCookies()
清除所有的cookies。
功能方法+ ES6
const cookieCleaner = () => { return document.cookie.split(";").reduce(function (acc, cookie) { const eqPos = cookie.indexOf("="); const cleanCookie = `${cookie.substr(0, eqPos)}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;`; return `${acc}${cleanCookie}`; }, ""); }
注意:不处理路径
//Delete all cookies 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:01 GMT;' + 'path=' + '/;' + 'domain=' + window.location.host + ';' + 'secure=;'; } }
经过多种风格的浏览器上多种方式的cookies的测试,我发现这里几乎没有什么工作,甚至50%。
请根据需要帮忙纠正,但我要把我的2分钱投在这里。 下面的方法打破了一切,基本上建立了基于这两个设置件的cookie值字符串,以及包括逐步建立的路径字符串,从/
当然开始。
希望这有助于他人,我希望任何批评都可能以完善这种方法的形式出现。 起初,我想要一个简单的1班轮作为其他人寻求,但JS饼干是不那么容易处理的事情之一。
;(function() { if (!window['deleteAllCookies'] && document['cookie']) { window.deleteAllCookies = function(showLog) { var arrCookies = document.cookie.split(';'), arrPaths = location.pathname.replace(/^\//, '').split('/'), // remove leading '/' and split any existing paths arrTemplate = [ 'expires=Thu, 01-Jan-1970 00:00:01 GMT', 'path={path}', 'domain=' + window.location.host, 'secure=' ]; // array of cookie settings in order tested and found most useful in establishing a "delete" for (var i in arrCookies) { var strCookie = arrCookies[i]; if (typeof strCookie == 'string' && strCookie.indexOf('=') >= 0) { var strName = strCookie.split('=')[0]; // the cookie name for (var j=1;j<=arrTemplate.length;j++) { if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist else { var strValue = strName + '=; ' + arrTemplate.slice(0, j).join('; ') + ';'; // made using the temp array of settings, putting it together piece by piece as loop rolls on if (j == 1) document.cookie = strValue; else { for (var k=0;k<=arrPaths.length;k++) { if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist else { var strPath = arrPaths.slice(0, k).join('/') + '/'; // builds path line strValue = strValue.replace('{path}', strPath); document.cookie = strValue; } } } } } } } showLog && window['console'] && console.info && console.info("\n\tCookies Have Been Deleted!\n\tdocument.cookie = \"" + document.cookie + "\"\n"); return document.cookie; } } })();
jQuery的:
var cookies = $.cookie(); for(var cookie in cookies) { $.removeCookie(cookie); }
香草JS
function clearListCookies() { var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var spcook = cookies[i].split("="); deleteCookie(spcook[0]); } function deleteCookie(cookiename) { var d = new Date(); d.setDate(d.getDate() - 1); var expires = ";expires="+d; var name=cookiename; //alert(name); var value=""; document.cookie = name + "=" + value + expires + "; path=/acc/html"; } window.location = ""; // TO REFRESH THE PAGE }
我在IE和Edge中发现了一个问题。 Webkit浏览器(Chrome,Safari)似乎更宽容。 设置cookie时,一定要设置“路径”,因为默认设置是设置cookie的页面。 因此,如果您尝试在不指定“路径”的情况下在不同的页面上过期,路径将不匹配,并且不会过期。 document.cookie
值不显示cookie的路径或过期时间,所以您无法通过查看该值来获取cookie的设置位置。
如果您需要从不同页面中删除cookie,请将设置页面的路径保存在cookie值中,以便稍后将其拉出或始终追加"; path=/;"
到cookie的价值。 那么它将从任何页面过期。