Devo eliminare i cookie lato client con lo stesso nome ma con percorsi diversi. Qual è il modo migliore per farlo in javascript.Rimozione di cookie con lo stesso nome ma percorsi diversi
risposta
Basta specificare lo stesso percorso del cookie che si desidera rimuovere, dandogli una scadenza passata.
document.cookie = 'name=value1; path=/';
document.cookie = 'name=value2; path=/path/';
alert(document.cookie); // name=value1; name=value2
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // name=value1
Cambiare è per scadere il cookie con un percorso di /
sarà comunque scade solo uno dei cookie - il percorso specificato deve corrispondere al percorso impostato:
document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // name=value2
Per rimuovere entrambi, si 'll deve scadere ognuno con il loro percorso:
document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString();
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString();
alert(document.cookie); // {blank}
Ora, questi esempi presuppongono si sta navigando /path/
o una sotto-directory di esso.
[modifica]
Per rimuovere alla rinfusa, provare qualcosa di simile:
function expireAllCookies(name, paths) {
var expires = new Date(0).toUTCString();
// expire null-path cookies as well
document.cookie = name + '=; expires=' + expires;
for (var i = 0, l = paths.length; i < l; i++) {
document.cookie = name + '=; path=' + paths[i] + '; expires=' + expires;
}
}
expireAllCookies('name', ['/', '/path/']);
Demo: http://jsfiddle.net/M2dZ3/
È inoltre possibile finte ricerche percorso di scissione e l'iterazione window.location.pathname
:
function expireActiveCookies(name) {
var pathname = location.pathname.replace(/\/$/, ''),
segments = pathname.split('/'),
paths = [];
for (var i = 0, l = segments.length, path; i < l; i++) {
path = segments.slice(0, i + 1).join('/');
paths.push(path); // as file
paths.push(path + '/'); // as directory
}
expireAllCookies(name, paths);
}
È possibile impostare un cookie con gli stessi parametri, ma una data nel passato:
document.cookie =
'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'
vedere alcune preziose informazioni on quirksmode
[EDIT] Per eliminare i cookie con lo stesso nome, è possibile provare:
function delete_cookie (cookie_name)
{
var cookie_date = new Date (); // current date & time
cookie_date.setTime (cookie_date.getTime() - 1);
document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString();
}
Questo rimuoverà anche i cookie che non hanno il percorso "/"? – JKown
vuoi dire che vuoi rimuovere tutti i cookie con lo stesso nome, prova il codice dalla mia risposta modificata – JMax
La preoccupazione è che eliminerà troppi cookie. Ma scadere con 'path = /' dovrebbe lasciare intatti gli altri. –
Quindi se il percorso può potenzialmente contenere 6 valori diversi, dovrei usare 6x document.cookie con il percorso corretto? – JKown
@JKown In sostanza. Tuttavia, suggerirei di eseguire il looping dei percorsi in modo da avere solo 1 istruzione 'document.cookie'. Vedi la mia modifica per un'opzione. –
Grazie, funziona per me. – JKown