如何使用 JavaScript 删除所有 cookie?

IT技术 javascript cookies
2021-02-04 13:27:07

我已经编写了用 JavaScript 保存 cookie 的代码。现在我需要清除 cookie,而不考虑我分配的值。

是否有任何脚本module可以删除由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);
}

我还能如何清除所有 cookie?

在webserver上测试代码会不会有问题?

4个回答

没有 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;
};
@Andbdrew 这不是打字错误。+在 JavaScript 中的任何变量前附加 a会将其转换为数字。没有它,您将获得字符串格式的日期,因为+此处运算符用作字符串连接运算符,而您真正想要的是 Unix 时间戳
2021-03-18 13:27:07
@jb - 由于您在此处包含了域信息,是否有可能列出使用站点自身域以外的域设置的 cookie?
2021-03-18 13:27:07
@YiJang 太棒了!我不知道 :)
2021-03-30 13:27:07
这比接受的答案更好地回答了这个问题。非常相关的信息。
2021-04-04 13:27:07
很酷的功能!虽然有一点错别字。“expires=”和新日期之间应该只有一个“+” :)
2021-04-12 13:27:07

从表面上看,它看起来不错 - 如果您调用eraseCookie()从 读取的每个 cookie document.cookie,那么您的所有 cookie 都将消失。

试试这个:

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

所有这些都有以下警告:

  • JavaScript无法删除设置HttpOnly标志的cookie
我现在找不到确切的参考,但是我在客户端操作由服务器创建的 cookie 时遇到了一些问题。我确实相信至少在 Firefox 上存在一些问题。
2021-03-15 13:27:07
“您只能删除由 JavaScript 创建的 cookie - 如果 cookie 是由服务器创建的,则您无法通过 JavaScript 删除它。” 实际上,您应该能够清除您可以看到的任何 cookie。
2021-03-26 13:27:07
是“HttpOnly”标志在追赶您。您可以从 javascript 中删除服务器 cookie,除非它们受到 HttpOnly 标志的保护
2021-04-10 13:27:07
感谢您的解释。我认为这个名字并不直观。
2021-04-12 13:27:07
为了准确起见,我编辑了答案中的最后一句话,因此上面的评论现在是多余的。
2021-04-13 13:27:07

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

删除 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
}

编辑:这将通过将其设置为昨天的日期来删除 cookie。

那里的 window.location 非常好。
2021-03-24 13:27:07

为什么使用 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;";                                
        }
    }