Effacer tous les cookies avec JavaScript

Comment supprimer tous les cookies pour le domaine courant en utilisant JavaScript?

209
demandé sur Yi Jiang 2008-10-07 20:41:55

17 réponses

function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

notez que ce code a deux limitations:

  • il ne supprimera pas les cookies avec le drapeau HttpOnly , car le drapeau HttpOnly empêche Javascript d'accéder au cookie.
  • il ne supprimera pas les cookies qui ont été paramétrés avec une valeur Path . (Ceci est en dépit du fait que ces cookies apparaîtront dans document.cookie , mais vous ne pouvez pas le supprimer sans spécifier la même valeur Path avec laquelle il a été défini.)
228
répondu Robert J. Walker 2017-07-06 09:44:07

One liner

au cas où vous voulez le coller rapidement...

document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });

et le code pour un bookmarklet :

javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
86
répondu Craig Smedley 2014-12-09 08:41:57

après un peu de frustration avec cela, j'ai moi-même assemblé cette fonction qui va tenter d'effacer un cookie nommé de tous les chemins. Il suffit d'appeler cela pour chacun de vos cookies et vous devriez être plus proche de supprimer chaque cookie que vous étiez avant.

function eraseCookieFromAllPaths(name) {
    // This function will attempt to remove a cookie from all paths.
    var pathBits = location.pathname.split('/');
    var pathCurrent = ' path=';

    // do a simple pathless delete first.
    document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';

    for (var i = 0; i < pathBits.length; i++) {
        pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
        document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
    }
}

Comme toujours différents navigateurs ont des comportements différents, mais cela a fonctionné pour moi. Profiter.

53
répondu AnthonyVO 2014-08-22 17:21:36

et en voici un pour effacer tous les cookies dans tous les chemins et toutes les variantes du domaine (www.mydomain.com, mydomain.com etc):

(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();
        }
    }
})();
34
répondu Jan 2015-10-27 10:59:23

si vous avez accès au jquery .cookie plugin, vous pouvez effacer tous les cookies de cette façon:

for (var it in $.cookie()) $.removeCookie(it);
14
répondu jichi 2014-01-06 09:38:36

autant que je sache, il n'y a aucun moyen de faire une suppression générale d'un cookie sur le domaine. Vous pouvez effacer un cookie si vous connaissez le nom et si le script est sur le même domaine que le cookie.

vous pouvez définir la valeur à vide et la date d'expiration à quelque part dans le passé:

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

il y a un excellent article ici sur la manipulation des cookies en utilisant javascript.

11
répondu ConroyP 2008-10-07 16:49:25

plus simple. Plus rapide.

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";    
}
5
répondu Dinesh 2013-11-21 08:17:42

Une réponse à la fois inspiré par seconde réponse ici et W3Schools

document.cookie.split(';').forEach(function(c) {
  document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});

semble fonctionner

edit: wow presque exactement le même que zach's intéressant comment le débordement de la pile les a mis à côté les uns des autres.

edit: nvm qui est temporaire apparemment

5
répondu Jacob David C. Cunningham 2017-05-24 16:52:29

a pensé que je partagerais cette méthode pour effacer les cookies. Peut-être pourrait-elle être utile à quelqu'un d'autre à un moment donné.

var cookie = document.cookie.split(';');

for (var i = 0; i < cookie.length; i++) {

    var chip = cookie[i],
        entry = chip.split("="),
        name = entry[0];

    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
3
répondu Zach Shallbetter 2017-02-19 17:13:22

vous pouvez obtenir une liste en regardant dans le document.cookie variable. Les éliminer tous n'est qu'une question de les passer en boucle et de les éliminer un par un.

2
répondu Sec 2008-10-07 17:04:05

voici un code simple pour supprimer tous les cookies en JavaScript .

function deleteAllCookies(){
   var cookies = document.cookie.split(";");
   for (var i = 0; i < cookies.length; i++)
     deleteCookie(cookies[i].split("=")[0]);
}

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

exécutez la fonction deleteAllCookies() pour effacer tous les cookies.

1
répondu Shubham Kumar 2016-07-04 11:55:08

approche fonctionnelle + 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}`;
  }, "");
}

Note: ne gère pas les chemins

1
répondu Stefano Saitta 2016-07-07 11:31:05

Je ne sais pas pourquoi la première réponse votée ne fonctionne pas pour moi.

Comme cette réponse , a déclaré:

il n'y a pas de solution à 100% pour supprimer les cookies du navigateur.

le problème est que les cookies sont identifiés de manière unique non seulement par leur" nom "clé, mais aussi par leur" domaine "et leur"chemin".

sans connaître le "domaine" et le" chemin " d'un cookie, vous ne pouvez pas de manière fiable le supprimer. Cette information n'est pas disponible dans le document de JavaScript.cookie. Il n'est pas non plus disponible via L'en-tête du Cookie HTTP!

donc mon idée est d'ajouter un contrôle de version de Cookie avec l'ensemble complet de réglage, obtention, suppression des cookies:

var cookie_version_control = '---2018/5/11';

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+cookie_version_control + "=" + (value || "")  + expires + "; path=/";
}

function getCookie(name) {
    var nameEQ = name+cookie_version_control + "=";
    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 removeCookie(name) {   
    document.cookie = name+cookie_version_control+'=; Max-Age=-99999999;';  
}
1
répondu Mashiro 2018-05-11 11:28:07
//Delete all cookies
function deleteAllCookies() {
    var cookies = document.cookie.split(";");
    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + '=;' +
            'expires=Thu, 01-Jan-1970 00:00:01 GMT;' +
            'path=' + '/;' +
            'domain=' + window.location.host + ';' +
            'secure=;';
    }
}
0
répondu Roman 2015-08-13 09:57:26

après avoir testé presque toujours la méthode listée dans plusieurs styles de navigateurs sur plusieurs styles de cookies, j'ai trouvé presque rien ici fonctionne même 50%.

s'il vous plaît aidez à corriger au besoin, mais je vais jeter mes 2 cents ici. La méthode suivante décompose tout et construit essentiellement la chaîne de valeur du cookie basée à la fois sur les pièces de réglages et en incluant une construction étape par étape de la chaîne de chemin, en commençant par / bien sûr.

espérons que cela aide les autres et j'espère que toute critique pourra venir sous la forme de perfectionner cette méthode. Au début, j'ai voulu un simple 1-liner comme certains d'autres ont cherché, mais les cookies JS sont l'une de ces choses pas si faciles à traiter.

;(function() {
    if (!window['deleteAllCookies'] && document['cookie']) {
        window.deleteAllCookies = function(showLog) {
            var arrCookies = document.cookie.split(';'),
                arrPaths = location.pathname.replace(/^\//, '').split('/'), //  remove leading '/' and split any existing paths
                arrTemplate = [ 'expires=Thu, 01-Jan-1970 00:00:01 GMT', 'path={path}', 'domain=' + window.location.host, 'secure=' ];  //  array of cookie settings in order tested and found most useful in establishing a "delete"
            for (var i in arrCookies) {
                var strCookie = arrCookies[i];
                if (typeof strCookie == 'string' && strCookie.indexOf('=') >= 0) {
                    var strName = strCookie.split('=')[0];  //  the cookie name
                    for (var j=1;j<=arrTemplate.length;j++) {
                        if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                        else {
                            var strValue = strName + '=; ' + arrTemplate.slice(0, j).join('; ') + ';';  //  made using the temp array of settings, putting it together piece by piece as loop rolls on
                            if (j == 1) document.cookie = strValue;
                            else {
                                for (var k=0;k<=arrPaths.length;k++) {
                                    if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
                                    else {
                                        var strPath = arrPaths.slice(0, k).join('/') + '/'; //  builds path line 
                                        strValue = strValue.replace('{path}', strPath);
                                        document.cookie = strValue;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            showLog && window['console'] && console.info && console.info("\n\tCookies Have Been Deleted!\n\tdocument.cookie = \"" + document.cookie + "\"\n");
            return document.cookie;
        }
    }
})();
0
répondu SpYk3HH 2017-01-13 18:25:39

Jquery:

var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}

vanilla js

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
}
0
répondu sureshvignesh 2017-07-06 09:54:21

j'ai trouvé un problème dans IE et Edge. Les navigateurs Webkit (Chrome, safari) semblent plus indulgents. Lors de la configuration des cookies, définissez toujours le "chemin" vers quelque chose, car la page par défaut sera la page qui définira le cookie. Donc, si vous essayez d'expirer sur une autre page sans préciser le "chemin", la trajectoire ne correspond pas et il n'expirera pas. La valeur document.cookie n'indique pas le chemin ou l'expiration d'un cookie, donc vous ne pouvez pas déterminer où le cookie a été défini en regardant la valeur.

si vous avez besoin d'expirer les cookies de différentes pages, enregistrez le chemin de la page de configuration dans la valeur du cookie pour que vous puissiez le retirer plus tard ou toujours ajouter "; path=/;" à la valeur du cookie. Alors il expirera de n'importe quelle page.

-1
répondu Derek Wade 2016-03-26 08:22:35