2011-09-20 11 views

Odpowiedz

17

Po prostu podaj tę samą ścieżkę pliku cookie, który chcesz usunąć, nadając mu wcześniejszą datę ważności.

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 

Zmiana go wygaśnie cookie ze ścieżką / będzie nadal tylko wygaśnie jeden z cookies - ścieżki podanej musi dopasować ścieżkę Zestaw:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString(); 

alert(document.cookie); // name=value2 

Aby usunąć zarówno ci „ll mają wygasnąć każdy z ich drodze:

document.cookie = 'name=; path=/; expires=' + new Date(0).toUTCString(); 
document.cookie = 'name=; path=/path/; expires=' + new Date(0).toUTCString(); 

alert(document.cookie); // {blank} 

teraz te przykłady zakładają jesteś przeglądania /path/ lub podkatalogu niego.


[edytuj]

Aby usunąć luzem, spróbuj coś takiego:

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/

Można również fałszywe wyszukiwań ścieżkę rozszczepienia i iteracji 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); 
} 

Demo: http://jsfiddle.net/M2dZ3/2/

+0

Jeśli ścieżka może potencjalnie zawierać 6 różnych wartości, powinienem użyć 6x document.cookie z właściwą ścieżką? – JKown

+0

@JKown Zasadniczo. Chociaż sugerowałbym zapętlenie ścieżek, więc masz tylko 1 instrukcję 'document.cookie'. Zobacz moją edycję dla jednej opcji. –

+0

Dzięki, to działa dla mnie. – JKown

0

Można ustawić ciasteczko z tymi samymi parametrami, ale datę w przeszłości:

document.cookie = 
    'ppkcookie2=another test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/' 

zobaczyć kilka cennych informacji on quirksmode

[EDIT], aby usunąć ciasteczka z tej samej nazwie, można spróbuj:

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

Source

+0

Czy to spowoduje usunięcie plików cookie, które nie mają ścieżki "/"? – JKown

+0

masz na myśli to, że chcesz usunąć wszystkie pliki cookie o tej samej nazwie, spróbuj kodu z mojej edytowanej odpowiedzi – JMax

+0

Obawia się, że usunie zbyt wiele plików cookie. Ale wygasające z 'path = /' powinno pozostawiać pozostałe nietknięte. –

Powiązane problemy