如何删除cookie?

IT技术 javascript cookies
2021-01-16 13:56:16

我创建cookie的功能是否正确?如何删除程序开始时的 cookie?有简单的编码吗?

function createCookie(name,value,days)
function setCookie(c_name,value,1) {
  document.cookie = c_name + "=" +escape(value);
}

setCookie('cookie_name',mac);

function eraseCookie(c_name) {
  createCookie(cookie_name,"",-1);
}
6个回答

试试这个:

function delete_cookie( name, path, domain ) {
  if( get_cookie( name ) ) {
    document.cookie = name + "=" +
      ((path) ? ";path="+path:"")+
      ((domain)?";domain="+domain:"") +
      ";expires=Thu, 01 Jan 1970 00:00:01 GMT";
  }
}

你可以这样定义get_cookie()

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}
get_cookie 未定义
2021-03-11 13:56:16
该函数的第二个版本不再起作用请参见 jsfiddle jsfiddle.net/b27Lgxgf/1@Luca 的 anwser 工作中的方法
2021-03-15 13:56:16
@MichałPerłakowski 我很确定它只是一个占位符/对您将在其他地方定义的实际函数的引用。
2021-03-17 13:56:16
我如何设置一个函数来检查我的 cookie 是什么以及它是否过期?
2021-03-23 13:56:16
这应该如何工作?JavaScript 没有内置get_cookie()函数。
2021-03-23 13:56:16

这里有一个关于Quirksmode的好链接

function setCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + (value || "")  + expires + "; path=/";
}
function getCookie(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) {   
    document.cookie = name+'=; Max-Age=-99999999;';  
}
还值得注意的是,路径域都需要有正确的值。
2021-03-12 13:56:16
应添加域。
2021-03-15 13:56:16
这个在 Firefox 中对我不起作用(我没有在其他地方测试过)。可能是因为 location.host 丢失。Luca Borrione 的回答确实如此;setCookie(name, "", null , null , null, 1); 尽管其他两个功能运行良好。
2021-03-26 13:56:16
注意:如果不起作用,请确保path正确。请参阅:developers.google.com/web/tools/chrome-devtools/manage-data/...
2021-03-27 13:56:16
经过测试,即使在 WKWebView 中,在页面加载之前也能完美运行。很好的解决方案。
2021-03-29 13:56:16

这行得通吗?

function eraseCookie(name) {
    document.cookie = name + '=; Max-Age=0'
}

我知道Max-Age在创建 cookie 时会导致 cookie 成为 IE 中的会话 cookie。不确定删除 cookie 时它是如何工作的。

设置为零,cookie 将在浏览器窗口关闭时过期。
2021-03-19 13:56:16

如果您手动创建 cookie,其他一些解决方案可能不起作用。

以下是删除 cookie 的快速方法:

document.cookie = 'COOKIE_NAME=; Max-Age=0; path=/; domain=' + location.host;

如果这不起作用,请尝试在上面的代码段中替换location.hostlocation.hostname

除了实现@Tom所说的之外,这对我也有用。将 location.host 更改为 location.hostname
2021-03-14 13:56:16
这是我选择使用的答案,但就我而言,直到我将其更改为 location.hostname
2021-03-20 13:56:16

这是Mozilla 提供的具有 unicode 支持删除 cookie功能的实现

function removeItem(sKey, sPath, sDomain) {
    document.cookie = encodeURIComponent(sKey) + 
                  "=; expires=Thu, 01 Jan 1970 00:00:00 GMT" + 
                  (sDomain ? "; domain=" + sDomain : "") + 
                  (sPath ? "; path=" + sPath : "");
}

removeItem("cookieName");

如果您使用 AngularJs,请尝试$cookies.remove(在它下面使用类似的方法):

$cookies.remove('cookieName');