【问题标题】:How to delete a cookie?如何删除cookie?
【发布时间】:2011-01-09 19:19:36
【问题描述】:

我创建 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);
}

【问题讨论】:

标签: javascript cookies


【解决方案1】:

这是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;';  
}

【讨论】:

  • 注意:如果不工作,请确保path 是正确的。见:developers.google.com/web/tools/chrome-devtools/manage-data/…
  • 域应该被添加。
  • 另外值得注意的是路径域都需要有正确的值。
  • 经过测试,即使在 WKWebView 中也能在页面加载之前完美运行。解决方案做得很好。
  • 这个在 Firefox 中对我不起作用(我没有在其他地方测试过)。可能是因为 location.host 丢失。 Luca Borrione 的回答确实如此; setCookie(name, "", null , null , null, 1);虽然其他两个函数运行良好。
【解决方案2】:

试试这个:

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 + '=');
    });
}

【讨论】:

  • 我如何设置一个功能并检查我的 cookie 是什么以及它是否过期?
  • get_cookie 未定义
  • 该功能的第二个版本不再起作用 请参阅 jsfiddle jsfiddle.net/b27Lgxgf/1。 @Luca 的 anwser 作品中的方法
  • 这应该如何工作? JavaScript 没有内置的get_cookie() 函数。
  • @MichałPerłakowski 我很确定它只是一个占位符/对您将在其他地方定义的实际函数的引用。
【解决方案3】:

您可以通过将到期日期设置为昨天来做到这一点。

将其设置为“-1”不起作用。这会将 cookie 标记为 Sessioncookie。

【讨论】:

  • 如果您在另一个页面上设置 cookie 并尝试从另一个页面删除它,您的示例将不起作用。该集有效,但无法删除。
  • 我最终使用了这个:github.com/carhartl/jquery-cookie 你必须使用路径删除:'/'
  • 这是一个很好的方法,除了......只需将到期时间设置为零。这将导致即时到期,并且不会让任何人感到困惑(“为什么开发人员将到期时间设置为昨天?这是一个错误,他们想要一天的生命周期吗?”)。编写代码使其更有意义,并且您的生活将不再那么混乱。这是当今编码中被低估的哲学......甚至MDN都建议将过期时间设置为零以删除cookie。
【解决方案4】:

这行得通吗?

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

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

【讨论】:

  • 设置为零,cookie会在浏览器窗口关闭时过期。
  • @AyexeM 刷新窗口也可以完成这项工作
【解决方案5】:

这是一个 delete cookie 函数的实现,Mozilla 支持 unicode:

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(下面使用类似的 approach):

$cookies.remove('cookieName');

【讨论】:

    【解决方案6】:

    为了删除一个 cookie,我用一个空值再次设置它并在 1 秒后过期。 具体来说,我总是使用以下口味之一(我更喜欢第二种):

    1.

        function setCookie(key, value, expireDays, expireHours, expireMinutes, expireSeconds) {
            var expireDate = new Date();
            if (expireDays) {
                expireDate.setDate(expireDate.getDate() + expireDays);
            }
            if (expireHours) {
                expireDate.setHours(expireDate.getHours() + expireHours);
            }
            if (expireMinutes) {
                expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
            }
            if (expireSeconds) {
                expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
            }
            document.cookie = key +"="+ escape(value) +
                ";domain="+ window.location.hostname +
                ";path=/"+
                ";expires="+expireDate.toUTCString();
        }
    
        function deleteCookie(name) {
            setCookie(name, "", null , null , null, 1);
        }
    

    用法:

    setCookie("reminder", "buyCoffee", null, null, 20);
    deleteCookie("reminder");
    

    2

        function setCookie(params) {
            var name            = params.name,
                value           = params.value,
                expireDays      = params.days,
                expireHours     = params.hours,
                expireMinutes   = params.minutes,
                expireSeconds   = params.seconds;
    
            var expireDate = new Date();
            if (expireDays) {
                expireDate.setDate(expireDate.getDate() + expireDays);
            }
            if (expireHours) {
                expireDate.setHours(expireDate.getHours() + expireHours);
            }
            if (expireMinutes) {
                expireDate.setMinutes(expireDate.getMinutes() + expireMinutes);
            }
            if (expireSeconds) {
                expireDate.setSeconds(expireDate.getSeconds() + expireSeconds);
            }
    
            document.cookie = name +"="+ escape(value) +
                ";domain="+ window.location.hostname +
                ";path=/"+
                ";expires="+expireDate.toUTCString();
        }
    
        function deleteCookie(name) {
            setCookie({name: name, value: "", seconds: 1});
        }
    

    用法:

    setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
    deleteCookie("reminder");
    

    【讨论】:

      【解决方案7】:

      我在删除通过 JavaScript 制作的 cookie 时遇到了麻烦,在我添加主机后它就可以工作了(将下面的代码向右滚动以查看 location.host)。清除域上的 cookie 后,尝试以下操作以查看结果:

      if (document.cookie.length==0)
      {
       document.cookie = 'name=example; expires='+new Date((new Date()).valueOf()+1000*60*60*24*15)+'; path=/; domain='+location.host;
      
       if (document.cookie.length==0) {alert('Cookies disabled');}
       else
       {
        document.cookie = 'name=example; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain='+location.host;
      
        if (document.cookie.length==0) {alert('Created AND deleted cookie successfully.');}
        else {alert('document.cookies.length = '+document.cookies.length);}
       }
      }
      

      【讨论】:

        【解决方案8】:

        如果您手动创建 cookie,其他一些解决方案可能无法正常工作。

        这是删除 cookie 的快速方法:

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

        如果这不起作用,请尝试在上面的 sn-p 中将 location.host 替换为 location.hostname

        【讨论】:

        • 这是我选择使用的答案,但就我而言,直到我将其更改为 location.hostname
        • 这对我也有用,除了实现@Tom所说的。将 location.host 更改为 location.hostname
        【解决方案9】:

        对于只需要 1 行代码删除 cookie 的人:

        如果您创建了一个 cookie,例如在带有 document.cookie = "test=hello" 的 Web 浏览器控制台中

        你可以删除它:

        document.cookie = "test=;expires=" + new Date(0).toUTCString()
        

        或者,如果您更喜欢直接写 UTC 日期:

        document.cookie = "test=;expires=Thu, 01 Jan 1970 00:00:00 GMT"
        

        如果您位于与 cookie 不同的路径(例如,如果您想删除在所有路径上使用的 cookie),您可以在 test=; 之后添加 path=/; 并且如果您位于不同的域 (例如,当使用.example.com而不是www.example.com为所有子域设置cookie时,您可以在test=;之后添加domain=.example.com;

        更新:在其他答案中使用 Max-Age=0 代替 expires=... 也有效(已使用 Firefox 测试)。

        【讨论】:

          【解决方案10】:

          我在支持 Chrome 和 Firefox 的网站上使用它。

          function delete_cookie(name) { document.cookie = name +'=; Path=/;  Domain=' + location.host +  '; Expires=Thu, 01 Jan 1970 00:00:01 GMT; SameSite=None; Secure' }
          

          【讨论】:

            猜你喜欢
            • 2013-04-04
            • 2015-02-24
            • 2013-07-22
            • 2015-09-26
            • 2013-01-01
            • 2011-04-22
            相关资源
            最近更新 更多