web-dev-qa-db-fra.com

Comment puis-je supprimer tous les cookies avec JavaScript?

J'ai écrit du code pour enregistrer les cookies en JavaScript. Maintenant, je dois effacer les cookies quelles que soient les valeurs que j'ai attribuées.

Existe-t-il des modules de script permettant de supprimer tous les cookies générés par Javascript ?

Mon exemple de code:

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

Sinon, comment pourrais-je effacer tous les cookies?

Y aura-t-il des problèmes lorsque je testerai le code sur le serveur Web?

71
venkatachalam

A première vue, tout va bien - si vous appelez eraseCookie() sur chaque cookie lu depuis document.cookie, alors tous vos cookies seront partis.

Essayez ceci:

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

Tout cela avec la mise en garde suivante:

  • JavaScript ne peut pas supprimer les cookies contenant le HttpOnly = drapeau défini.
59
Guss

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 clé "nom" mais également par leur "domaine" et "chemin".

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

Toutefois, si vous connaissez le nom, le chemin d'accès et le domaine d'un cookie, vous pouvez le supprimer en définissant un cookie vide avec une date d'expiration antérieure, par exemple:

function clearCookie(name, domain, path){
    var domain = domain || document.domain;
    var path = path || "/";
    document.cookie = name + "=; expires=" + +new Date + "; domain=" + domain + "; path=" + path;
};
75
jb.

Bon mot

Au cas où vous voudriez 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=/"); }); })();
26
Craig Smedley

C’est une fonction que nous utilisons dans notre application et qui fonctionne très bien.

supprimer le cookie: pas de méthode d'argument

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
}

Modifier: Ceci supprimera le cookie en le fixant à la date d'hier.

10
antnewbee

Pourquoi utilisez-vous new Date au lieu d'une chaîne UTC statique?

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