Elimina cookie per nome?


151

Come posso eliminare un cookie specifico con il nome roundcube_sessauth?

Non dovrebbe il seguente:

function del_cookie(name) {
    document.cookie = 'roundcube_sessauth' + 
    '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
} 

E poi:

<a href="javascript:del_cookie(name);">KILL</a>

Uccidi il roundcube_sessauthbiscotto?


1
name? Che senso ha questo? O è una sbronza da una versione più versatile che ti consente di specificare il nome del cookie?
paxdiablo,

Non pensare che sia un imbecille. Chiede specificamente di cancellare tutti i cookie.
paxdiablo,

1
Non voglio cancellare tutti i cookie ... Solo uno. Ho trovato il codice di base su Google. E ovviamente l'ho provato. @Paxdiablo L'ho assunto per la denominazione del cookie, ma potrei sbagliarmi completamente.
Charlie,

@paxdiablo - ...How can I delete a specific cookie
Derek 朕 會 功夫

1
@Derek et al., Sembra che tu abbia frainteso. Stavo affermando che il duplicato proposto da Gabe non era affatto un duplicato perché il duplicato proposto ha chiesto di eliminare tutti i cookie e questa domanda chiede di eliminare un cookie specifico . Non mi lamento di questa domanda in alcun modo, forma o forma :-)
paxdiablo,

Risposte:


252

È necessario definire il percorso in cui esiste il cookie per assicurarsi di eliminare il cookie corretto.

function set_cookie(name, value) {
  document.cookie = name +'='+ value +'; Path=/;';
}
function delete_cookie(name) {
  document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}

Se non si specifica il percorso, il browser imposterà un cookie relativo alla pagina in cui ci si trova attualmente, quindi se si elimina il cookie su una pagina diversa, l'altro cookie continua la sua esistenza.

Modifica in base al commento di @Evan Morrison.
Tenere presente che in alcuni casi per identificare il cookie corretto, Domainè necessario il parametro.
Di solito è definito come Domain=.yourdomain.com.
Posizionare un punto davanti al tuo nome di dominio significa che questo cookie può esistere su qualsiasi sottodominio ( wwwconta anche come sottodominio).

Inoltre, come indicato nella risposta di @ RobertT, i HttpOnlycookie non possono essere eliminati con JavaScript sul lato client.


23
Questo mi stava facendo impazzire! Dopo aver aggiunto Path = /, sono stato in grado di eliminare. Grazie!
duyn9uyen,

12
Questa dovrebbe essere la risposta corretta, Pathnella maggior parte dei casi non funziona senza .
SuperMarco,

9
Non sono stato in grado di eliminare un cookie fino a quando non ho aggiunto sia il percorso sia il 'Dominio = valore corretto; '... Quindi la mia affermazione era: document.cookie = "cookieName =; path = /; expires = Thu, 01 Jan 1970 00:00:01 GMT; domain = .myDomain.com"
Evan Morrison,

1
Questa soluzione funziona ancora, ma può essere scritta in modo leggermente più conciso Max-Age=0, se ti interessano tali cose.
MaxPRafferty,

181

Per eliminare un cookie, impostare la expiresdata su qualcosa nel passato. Una funzione che lo farebbe sarebbe.

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

Quindi per eliminare un cookie chiamato roundcube_sessauthbasta farlo.

delete_cookie('roundcube_sessauth');

1
Credo che dovrebbe funzionare (sembra che dovrebbe funzionare: D!), Ma sto visualizzando i cookie impostati dalla mia pagina in Firefox e quando faccio clic sul pulsante "KILL", il cookie non viene eliminato. Qualche idea sul perché?
Charlie,

Funziona con Google Chrome. Installa firebug e vedi se ci sono errori.

1
Nessun errore, suppongo che non stia eliminando il cookie in Roundcube. Probabilmente cancella bene anche altri cookie.
Charlie,

39
Per gli utenti che cercano una risposta a questa domanda, vedere la risposta di seguito. La path=/chiave è importante per la compatibilità del browser.
bencripps,

2
Questa risposta non ha funzionato per me su Chrome, non l'ho mai provata su Firefox. Ma la risposta di emii qui sotto ha funzionato.
Daniel F

11

// se passato exMins = 0 verrà eliminato non appena lo creerà.

function setCookie(cname, cvalue, exMins) {
    var d = new Date();
    d.setTime(d.getTime() + (exMins*60*1000));
    var expires = "expires="+d.toUTCString();  
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

setCookie('cookieNameToDelete','',0) // this will delete the cookie.

exMins non è definito in questo esempio, probabilmente intendevi giorni
bhurlow

Sì .. invece rinominate l'argomento exdays a exMins .. grazie #BhBh
Kishor Patil,

7

Non sono sicuro se questa fosse la situazione con la versione di Roundcube del maggio '12, ma per quella attuale la risposta è che non è possibile eliminare i roundcube_sessauthcookie da JavaScript, poiché è contrassegnato come HttpOnly. Ciò significa che non è accessibile dal codice lato client JS e può essere rimosso solo tramite lo script lato server o l'azione diretta dell'utente (tramite alcune meccaniche del browser come il debugger integrato o alcuni plugin).


1

Puoi provare questa soluzione

var d = new Date();
d.setTime(d.getTime());
var expires = "expires="+d.toUTCString();
document.cookie = 'COOKIE_NAME' + "=" + "" + ";domain=domain.com;path=/;expires=" + expires;

0

Nel mio caso ho usato il codice di soffiaggio per diversi ambienti.

  document.cookie = name +`=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;Domain=.${document.domain.split('.').splice(1).join('.')}`;
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.