如何使用JavaScript删除当前域的所有cookie ?


当前回答

这里有一个清除所有路径和所有变体域(www.mydomain.example, mydomain。例等):

(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();
        }
    }
})();

其他回答

函数方法+ 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}`;
  }, "");
}

注意:不处理路径

简单。得更快。

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";    
}

如果你只关心清除安全源上的Cookie,你可以使用Cookie Store API和它的.delete()方法。

cookieStore.getAll().then(cookies => cookies.forEach(cookie => {
    console.log('Cookie deleted:', cookie);
    cookieStore.delete(cookie.name);
}));

访问caniuse.com表,查看Cookie Store API的浏览器支持情况。

我们可以这样做:

deleteAllCookies=()=>
      {
      let c=document.cookie.split(';')
      for(const k of c)
         {
         let s=k.split('=')
         document.cookie=s[0].trim()+'=;expires=Fri, 20 Aug 2021 00:00:00 UTC'
         }
      }

用法:

deleteAllCookies()

截止日期是这个答案之前的任意一天;它可以是当天之前的任何日期 在JS中,你不能基于路径读取cookie 在JS中,你只能设置或获取cookie

我在这里贡献是因为这个功能将允许您删除所有cookie(匹配路径,默认为no-path或\),也包括设置为包含在子域上的cookie

function clearCookies( wildcardDomain=false, primaryDomain=true, path=null ){
  pathSegment = path ? '; path=' + path : ''
  expSegment = "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"
  document.cookie.split(';').forEach(
    function(c) { 
      primaryDomain && (document.cookie = c.replace(/^ +/, "").replace(/=.*/, expSegment + pathSegment))
      wildcardDomain && (document.cookie = c.replace(/^ +/, "").replace(/=.*/, expSegment + pathSegment + '; domain=' + document.domain))
    }
  )
}