Jak usunąć plik cookie za pomocą jQuery?

90

Chcę używać jQuery do usuwania plików cookie; Próbowałem tego:

$.cookie('name', '', { expires: -1 });

Ale kiedy odświeżam stronę, plik cookie nadal tam jest:

alert('name:' +$.cookie('name'));

Czemu?

user319854
źródło
niektóre przeglądarki usuwają plik cookie dopiero po ponownym uruchomieniu przeglądarki.
Eboubaker

Odpowiedzi:

146

Aby usunąć plik cookie z JQuery, ustaw wartość na null:

$.cookie("name", null, { path: '/' });

Edycja: Ostatecznym rozwiązaniem było jawne określenie pathwłaściwości przy każdym dostępie do pliku cookie, ponieważ OP uzyskuje dostęp do pliku cookie z wielu stron w różnych katalogach, a zatem domyślne ścieżki były różne (nie zostało to opisane w pierwotnym pytaniu). Rozwiązanie zostało odkryte w dyskusji poniżej, co wyjaśnia, dlaczego ta odpowiedź została przyjęta - mimo że nie jest poprawna.

W przypadku niektórych wersji pliku cookie jQ powyższe rozwiązanie ustawi plik cookie na ciąg znaków null. W ten sposób nie usuwa pliku cookie. Zamiast tego użyj kodu zgodnie z sugestią poniżej.

$.removeCookie('the_cookie', { path: '/' });
Chadwick
źródło
Ale ze źródła tutaj: plugins.jquery.com/files/jquery.cookie.js.txt : to if (value === null) { value = '';options.expires = -1;}, co znajduje się w funkcji przetwarzania, więc mają wykonywać to samo. (parametry są (name, value, options))
aularon
9
Czy kod ustawienia pliku cookie i kod testowy znajdują się na tej samej stronie? Jeśli nie, musisz jawnie ustawić pathw opcjach oba polecenia, ponieważ domyślnie jest to ścieżka bieżącej strony. Przetestuj, ustawiając katalog główny swojej domeny we wszystkich miejscach, w których plik cookie jest odczytywany i zapisywany:$.cookie('name', value, {path:'/'})
Chadwick,
1
Chadwick> Może masz rację. Dla exm. Ustawiam pliki cookie w witrynie site.com, a następnie wchodzę na site.com/user, site.com/user/mod, site.com/user/mod/new i chciałbym widzieć pliki cookie na całej tej stronie. Jak musi wyglądać ścieżka, taka jak ta: {ścieżka: '/'}?
user319854
2
Ten kod nie usuwa pliku cookie, ale ustawia wartość null.
Tomzan
12
-1, ponieważ to faktycznie nie usuwa ciasteczka. $.removeCookie('cookie_name')robi.
Rosdi Kasim
71

Możesz spróbować tego:

$.removeCookie('the_cookie', { path: '/' });

źródło: https://github.com/carhartl/jquery-cookie#readme

Gert-Jan Rebel
źródło
Tak… Nie przeszkadza mi to
Cataclysm
W przypadku korzystania z subdomeny może być konieczne jej określenie. Zwłaszcza, że ​​kropka na początku nazwy domeny może być wymagana (.www.example.com)
Alexis Wilke
Zauważ, że to nie zadziałało dla nas, gdy kod musiał przejść do innej funkcji z jakiegokolwiek powodu. $ .cookie ('name', null) jak powyżej wydaje się być bardziej wiarygodne. Ten plik cookie do usuwania może jednak zadziałać dla niektórych osób.
Ligemer
To jest rzeczywiście prawdziwa odpowiedź!
Kalaschni
15

Możesz także usunąć pliki cookie bez korzystania z wtyczki jquery.cookie:

document.cookie = 'NAMEOFYOURCOOKIE' + '=; expires=Thu, 01-Jan-70 00:00:01 GMT;';
Jan Richter
źródło
4

jest to problem niezrozumienia plików cookie. Przeglądarki rozpoznają wartości plików cookie nie tylko dla kluczy, ale także porównują ścieżkę opcji i domenę. Dlatego przeglądarki rozpoznają inną wartość, która z plików cookie ma ten klucz „nazwa” z opcją ustawienia serwera (ścieżka = „/”; domena = „moja_domena.com”), a klucz to „nazwa” bez opcji.

logan kim
źródło
1

Spróbuj tego

 $.cookie('_cookieName', null, { path: '/' });

{Ścieżka: „/”} wykona zadanie za Ciebie

Otto Kanellis
źródło
1

U mnie zadziałało tylko wtedy, gdy pathbyło ustawione tj .:

$.cookie('name', null, {path:'/'})
Andron
źródło
Głosowanie w dół, ponieważ kopiujesz i wklejasz moją odpowiedź jako swoją
Otto Kanellis
1
@OttoKanellis, więc sugeruję, aby również zanotować zaakceptowaną odpowiedź (ponieważ została zredagowana po mojej odpowiedzi) i również Twoją odpowiedź (ponieważ nie podkreśliłeś znaczenia parametru ścieżki )!
Andron
-3

To co robisz jest poprawne, problem jest gdzie indziej, np. Plik cookie jest w jakiś sposób ponownie ustawiany przy odświeżaniu.

aularon
źródło
4
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Uri Agassi
Jeśli chodzi o tę samą odpowiedź, mówię, że OP robi to we właściwy sposób. Kopiowanie i wklejanie kodu OP będzie zbędne, a dodanie kolejnego kodu będzie mylące dla czytelnika. Można przewinąć w górę i zobaczyć, co robił PO, jest to „podstawowa część” tutaj. Jeśli jednak czujesz, że lepiej będzie coś dołączyć (podobno niektórzy ludzie robią ... Jeden z nich nawet przegłosował moją odpowiedź :)), po prostu edytuj odpowiedź i odpowiednio ją popraw. Pozdrawiam
aularon
Problem z linkami polega na tym, że mają tendencję do „gnicia” - zmieniają się, poruszają, znikają (przykład - Twój link jest już martwy!). Dlatego wolimy, abyś zacytował odpowiedni tekst z linku wraz z nim, aby Twoja odpowiedź była samodzielna (patrz również meta.stackexchange.com/questions/8231/… )
Uri Agassi
Doskonale zdaję sobie z tego sprawę, ale znowu: tak nie jest. Całą powyższą odpowiedź można przepisać jako „To, co robisz, jest poprawne, problem tkwi gdzie indziej, np. Plik cookie jest w jakiś sposób ponownie ustawiany przy odświeżaniu”. Tak więc, ponownie, zgnilizna linków jest problemem, w tym sama odpowiedź obok linku jest drogą do zrobienia. To po prostu nie ma znaczenia dla tej odpowiedzi.
aularon
Tak więc raz po raz, jeśli odpowiedź zawiera jedno łącze, które jest martwe, nie oznacza, że ​​odpowiedź nie jest wystarczająco dobra. Niektóre linki służą tylko do podania dodatkowych informacji, ale nie są one konieczne do uzyskania kompletnej odpowiedzi. Wydaje mi się, że to zachowanie przypomina źle zaprogramowanego bota, który nie ma podstawowego NLP, aby zrozumieć, w jakim jest podany kontekst. Prawdopodobnie powinieneś przestać to robić.
aularon