Comment supprimer un cookie?

338

Ma fonction de création d'un cookie est-elle correcte? Comment supprimer le cookie au début de mon programme? existe-t-il un codage simple?

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);
}
kennedy
la source
1
w3schools a de bonnes fonctions pour les cookies sur w3schools.com/js/js_cookies.asp . Vous pouvez utiliser setCookie('name', 'value', 0)pour supprimer un cookie.
Pete

Réponses:

341

Essaye ça:

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

Ou:

function delete_cookie( name ) {
  document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Vous pouvez définir get_cookie()comme ceci:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}
ACP
la source
2
comment puis-je définir une fonction et vérifier quels sont mes cookies et s'ils expirent encore?
kennedy
61
get_cookie n'est pas défini
Kreker
9
La deuxième version de la fonction ne fonctionne plus Voir jsfiddle jsfiddle.net/b27Lgxgf/1 . Approche dans les réponses de @Luca
Tasos K.
6
Comment est-ce censé fonctionner? JavaScript n'a pas de get_cookie()fonction intégrée.
Michał Perłakowski
4
@ MichałPerłakowski Je suis à peu près sûr qu'il ne s'agissait que d'un espace réservé / d'une référence à une fonction réelle que vous définiriez ailleurs.
JSeligsohn
114

Voici un bon lien sur 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;';  
}
Luca Matteis
la source
20
note: toGMTString a été déprécié en faveur detoUTCString
drzaus
4
note: en cas de non fonctionnement, assurez-vous que pathc'est correct. voir: developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti
le domaine doit être ajouté.
Michael Kapustey
3
Il convient également de noter que le chemin et le domaine doivent avoir des valeurs correctes.
Esko
Testé, fonctionne parfaitement même dans WKWebView, avant le chargement de la page. Bon travail sur la solution.
PashaN
32

cela fonctionnerait-il?

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

Je sais Max-Ageque le cookie est un cookie de session dans IE lors de la création du cookie. Je ne sais pas comment cela fonctionne lors de la suppression des cookies.

Collin Anderson
la source
Mis à zéro, le cookie expirera à la fermeture de la fenêtre du navigateur.
AyexeM
17

Voici une implémentation d'une fonction de suppression de cookie avec prise en charge unicode de Mozilla:

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

Si vous utilisez AngularJs, essayez $ cookies.remove (en dessous, il utilise une approche similaire ):

$cookies.remove('cookieName');
Vitalii Fedorenko
la source
17

Vous pouvez le faire en définissant la date d'expiration sur hier.

La définition de "-1" ne fonctionne pas. Cela marque un cookie en tant que Sessioncookie.

Markus Nordhaus
la source
votre exemple ne fonctionne pas si vous définissez un cookie sur une autre page et essayez de le supprimer d'une autre page. l'ensemble fonctionne, mais ne peut pas le supprimer.
chovy
2
J'ai fini par utiliser ceci: github.com/carhartl/jquery-cookie Et vous devez supprimer en utilisant le chemin: '/'
chovy
C'est une bonne approche, sauf ... il suffit de régler le délai d'expiration à zéro. Cela entraînera une expiration instantanée et ne sera source de confusion pour personne ("Pourquoi le développeur a-t-il défini l'heure d'expiration sur hier? Est-ce une erreur, souhaitait-il une durée de vie d'un jour?"). Écrivez du code pour qu'il ait plus de sens et votre vie sera moins déroutante sur toute la ligne. Il s'agit d'une philosophie sous-évaluée dans le codage de nos jours ... Même MDN suggère de mettre le délai d'expiration à zéro pour supprimer un cookie.
dudewad
10

Pour supprimer un cookie, je le redéfinis avec une valeur vide et expirant en 1 seconde. Dans les détails, j'utilise toujours l'une des saveurs suivantes (j'ai tendance à préférer la seconde):

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

Usage:

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

Usage:

setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
deleteCookie("reminder");
Luca Borrione
la source
8

Certaines des autres solutions peuvent ne pas fonctionner si vous avez créé le cookie manuellement.

Voici un moyen rapide de supprimer un cookie:

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

J'ai eu du mal à supprimer un cookie créé via JavaScript et après avoir ajouté l'hôte, cela a fonctionné (faites défiler le code ci-dessous vers la droite pour voir le location.host). Après avoir effacé les cookies sur un domaine, essayez ce qui suit pour voir les résultats:

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);}
 }
}
John
la source