2012-05-15 10 views
94

Come posso eliminare un cookie specifico con il nome roundcube_sessauth?Elimina cookie per nome?

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> 

uccidere il cookie roundcube_sessauth?

+0

Bene hai provato esso? – Gabe

+1

'nome'? Qual è il punto di questo? O è una sbornia da una versione più versatile che ti permette di specificare il nome del cookie? – paxdiablo

+0

possibile duplicato di [Come posso cancellare tutti i cookie con Javascript?] (Http://stackoverflow.com/questions/595228/how-can-i-delete-all-cookies-with-javascript) – Gabe

risposta

121

Al fine di eliminare un cookie impostare la data expires a qualcosa in passato. Una funzione che fa questo sarebbe.

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

Quindi eliminare solo un cookie denominato roundcube_sessauth.

delete_cookie('roundcube_sessauth'); 
+0

Mi sento come se * dovessi * 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 del perché? – Charlie

+0

Funziona in Google Chrome. Installa firebug e controlla se ci sono errori. –

+1

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

4

Io non sono davvero sicuro che era la situazione con la versione Roundcube da maggio '12, ma per quello attuale la risposta è che non è possibile eliminare roundcube_sessauth cookie di JavaScript, come è contrassegnato come HttpOnly . Questo significa che non è accessibile dal codice lato client JS e può essere rimosso solo dallo script lato server o da un'azione diretta dell'utente (tramite alcune meccaniche del browser come il debugger integrato o qualche plugin).

143

È necessario definire il percorso su cui esiste cookie per garantire che si elimina quello vero

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 imposta dei cookie relativi alla pagina siete attualmente su, quindi se si elimina cookie su una pagina diversa, altri cookie continuano la sua esistenza.

Edit in base a commento di @Evan Morrison.
Tenere presente che in alcuni casi per identificare il cookie corretto, è necessario anche il parametro Domain.
Generalmente utilizzato come Domain=.yourdomain.com
Periodo di fronte al nome di dominio indica che questo cookie può esistere in qualsiasi sottodominio (www conteggia anche come sottodominio).

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

+13

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

+4

stesso qui, avevo bisogno di 'percorso = /;' per questo funziona. – bobbyrne01

+9

Questa dovrebbe essere la risposta corretta, nella maggior parte dei casi non funziona senza 'Path'. – SuperMarco

3

// se exMins passati = 0 si cancellerà, non appena lo crea.

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. 
+0

exMins non è definito in questo esempio, probabilmente si intende exdays – BHBH

+0

Sì .. rinominare invece l'argomento exdays su exMins .. thanks #BhBh –

1

setCookie('cookienameToDelete','',0) funziona per me

+0

Ciò non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (https://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (https://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/18694016) – abigperson

Problemi correlati