如何使用 JavaScript 删除所有 Cookie?

我已经用 JavaScript 编写了代码来保存 cookie。现在我需要清除 cookie,而不管我分配的值是什么。

是否有脚本模块来删除所有由 Javascript生成的 cookie?

我的示例代码:

document.cookie = 'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'


function createCookie(name,value,days) {
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
var expires = "; expires="+date.toGMTString();
}
else var expires = "";
document.cookie = name+"="+value+expires+"; path=/";
}


function readCookie(name) {
var nameEQ = name + "=";
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 eraseCookie(name) {
createCookie(name,"",-1);
}

不然我怎么清理所有的饼干?

当我在网络服务器上测试代码时会有什么问题吗?

215443 次浏览

从表面上看,它看起来没问题——如果你在每个从 document.cookie读取的 cookie 上调用 eraseCookie(),那么所有的 cookie 都会消失。

试试这个:

var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
eraseCookie(cookies[i].split("=")[0]);

所有这些都需要注意以下几点:

  • JavaScript不能删除设置了 < a href = “ https://en.wikipedia.org/wiki/HTTP _ cookie # Secure _ and _ HttpOnly”rel = “ noReferrer”> HttpOnly 标志的 cookie。

没有100% 删除浏览器 Cookie 的解决方案。

问题是 Cookie 不仅通过键“名称”而且通过它们的“域”和“路径”来唯一标识。

如果不知道 cookie 的“域”和“路径”,就无法可靠地删除它。此信息不能通过 JavaScript 的 document.cookie获得。它也不能通过 HTTP Cookie 头部获得!

但是,如果你知道 cookie 的名称、路径和域,那么你可以通过设置一个过去有效期的空 cookie 来清除它,例如:

function clearCookie(name, domain, path){
var domain = domain || document.domain;
var path = path || "/";
document.cookie = name + "=; expires=" + +new Date + "; domain=" + domain + "; path=" + path;
};

这是我们在应用程序中使用的一个函数,它运行良好。

Delete cookie: 没有参数方法

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
}

编辑: 这将删除饼干设置为昨天的日期。

为什么使用 new Date 而不是静态 UTC 字符串?

    function clearListCookies(){
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++){
var spcook =  cookies[i].split("=");
document.cookie = spcook[0] + "=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
}
}