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

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

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


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.


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

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.


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

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;

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);}
 }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.