Come eliminare un cookie?


338

La mia funzione di creazione di un cookie è corretta? Come cancello i cookie all'inizio del mio programma? c'è una semplice codifica?

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 ha buone funzioni per i cookie su w3schools.com/js/js_cookies.asp . Puoi usare setCookie('name', 'value', 0)per cancellare un cookie.
Pete,

Risposte:


341

Prova questo:

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

O:

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

Puoi definire get_cookie()così:

function get_cookie(name){
    return document.cookie.split(';').some(c => {
        return c.trim().startsWith(name + '=');
    });
}

2
come posso impostare una funzione e controllare quali sono i miei cookie e se scadono ancora?
Kennedy il

61
get_cookie non è definito
Kreker

9
La seconda versione della funzione non funziona più Vedi jsfiddle jsfiddle.net/b27Lgxgf/1 . Approccio nelle opere di Anwser di @Luca
Tasos K.,

6
Come dovrebbe funzionare? JavaScript non ha una get_cookie()funzione integrata.
Michał Perłakowski,

4
@ MichałPerłakowski Sono abbastanza sicuro che avrebbe dovuto essere solo un segnaposto / riferimento a una funzione reale che definiresti altrove.
JSeligsohn,

114

Ecco un buon link su 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
nota: se non funziona, assicurarsi che pathsia corretto. vedi: developers.google.com/web/tools/chrome-devtools/manage-data/…
Gayan Weerakutti

dominio dovrebbe essere aggiunto.
Michael Kapustey,

3
Vale anche la pena notare che sia il percorso che il dominio devono avere valori corretti.
Esko,

Testato, funziona perfettamente anche in WKWebView, prima del caricamento della pagina. Ottimo lavoro sulla soluzione.
PashaN,

32

funzionerebbe?

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

So che Max-Agefa sì che il cookie sia un cookie di sessione in IE durante la creazione del cookie. Non sono sicuro di come funzioni quando si eliminano i cookie.


Impostato su zero, il cookie scadrà alla chiusura della finestra del browser.
AyexeM

17

Ecco un'implementazione di una funzione di eliminazione dei cookie con supporto Unicode di 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");

Se usi AngularJs, prova $ cookies.remove (sotto usa un approccio simile ):

$cookies.remove('cookieName');

17

Puoi farlo impostando la data di scadenza a ieri.

Impostarlo su "-1" non funziona. Questo segna un cookie come Sessioncookie.


il tuo esempio non funziona se imposti i cookie su un'altra pagina e provi a eliminarlo da un'altra pagina. il set funziona, ma non può eliminarlo.
frizzante

2
Ho finito per usare questo: github.com/carhartl/jquery-cookie E devi cancellare usando il percorso: '/'
chovy,

Questo è un buon approccio tranne ... basta impostare il tempo di scadenza a zero. Ciò causerà una scadenza immediata e non confondere nessuno ("Perché lo sviluppatore ha impostato la scadenza a ieri? È stato un errore, hanno voluto una durata di un giorno?"). Scrivi il codice in modo che abbia più senso e la tua vita sarà meno confusa lungo la linea. Questa è una filosofia sottovalutata nella codifica al giorno d'oggi ... Anche MDN suggerisce di impostare il tempo di scadenza a zero per eliminare un cookie.
Dudewad,

10

Per eliminare un cookie, l'ho impostato di nuovo con un valore vuoto e scadendo tra 1 secondo. In dettaglio, utilizzo sempre uno dei seguenti gusti (tendo a preferire il secondo):

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

Uso:

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

Uso:

setCookie({name: "reminder", value: "buyCoffee", minutes: 20});
deleteCookie("reminder");

8

Alcune delle altre soluzioni potrebbero non funzionare se il cookie è stato creato manualmente.

Ecco un modo rapido per eliminare un cookie:

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

6

Ho avuto problemi con la cancellazione di un cookie creato tramite JavaScript e dopo aver aggiunto l'host ha funzionato (scorrere il codice in basso a destra per vedere il location.host). Dopo aver cancellato i cookie su un dominio, prova quanto segue per vedere i risultati:

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);}
 }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.