Plik cookie Javascript bez daty ważności


143

Chciałbym założyć plik cookie, który nigdy nie wygasa. Czy to w ogóle byłoby możliwe?

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

Nie chcę, aby data była naprawdę duża, po prostu zastanawiam się, czy w pliku cookie była wartość parametru expires, która mówi, że nigdy nie wygasa.

Dzięki.


1
Dlaczego nie chcesz, aby data była duża?
AnthonyWJones

13
robienie dużej randki sprawia, że ​​czuję się, jakbym oszukiwał. Jeśli to jedyny sposób, myślę, że będę musiał zrobić dużą randkę.
Jose Vega,

Odpowiedzi:


170

Nie. Nie da się zrobić. `` Sposób '' na to polega po prostu na ustawieniu daty wygaśnięcia na 2030.


31
Jeszcze tylko cztery lata. Mam nadzieję, że zaktualizowałeś plik cookie.
antony.ouseph.k

160
2020 - rokokalipsy ciasteczek
JeffreyPia

14
Cholera, z każdym rokiem jest coraz bliżej, mam nadzieję, że twój kod został zaktualizowany.
kartsims

22
Jest teraz edytowany do 2030 roku,
odkładamy

7
Tak więc, w zasadzie, 19 stycznia 2038 roku, Chewie zasiądzie w
Sokole

108

Nie ma składni tego, czego chcesz. Brak ustawienia wygasa powoduje wygaśnięcie pliku cookie po zakończeniu sesji. Jedyną opcją jest wybranie dowolnej dowolnej dużej wartości. Należy pamiętać, że niektóre przeglądarki mają problemy z datami po 2038 roku (kiedy czas epoki unixa przekracza 32-bitową liczbę int).


25
2038-01-19, 03:14:08 UTC, a dokładniej.
Wilhelm Klopp

Dla wyjaśnienia: czy jest to reguła działająca w ten sam sposób w każdej przeglądarce? co oznacza, że ​​jeśli nie ustawię daty wygaśnięcia, plik cookie będzie trwał tylko do końca sesji.
Silver Ringvee

2
Plik cookie utworzony bez dyrektywy Expireslub Max-Agejest plikiem cookie sesji: jest usuwany, gdy klient zamyka się. Jednak przeglądarki internetowe mogą korzystać z przywracania sesji , co powoduje, że większość plików cookie sesji jest trwała, tak jakby przeglądarka nigdy nie została zamknięta. ( źródło: MDN )
mfluehr

67

Możesz to zrobić jako przykład w dokumentach Mozilli :

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

PS

Oczywiście będzie problem, jeśli ludzkość nadal będzie używać twojego kodu w pierwszej minucie roku 10000 :)


89
Czy na pewno jest piątek?
David


5
Nie działa dla mnie przy użyciu npmjs.com/package/universal-cookie . Poszedłem z rozwiązaniem z roku 2038 . Napisałem bilet, aby wrócić w 2030 roku, aby sprawdzić, czy jest poprawka.
Hinrich

15

Wszystkie pliki cookie wygasają zgodnie ze specyfikacją plików cookie , maksymalna wartość, jaką można ustawić, to

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

Tak więc maksymalny czas życia plików cookie to

$.cookie('subscripted_24', true, { expires: 2147483647 });

7
Ten numer mi nie pasował. Po kilku próbach i błędach, najwyższa liczba, jaką udało mi się wykorzystać, to 99983090 (wygasa = piątek, 12 września 275760 18:10:24 GMT). Wszystko wyższe zwróciło „Nieprawidłowa data”
JeffreyPia

Jeśli przekażesz parametr number as expires do jquery-cookie lub js-cookie, wygaśnięcie potrwa dni. Jeśli chcesz mieć stałą datę, musisz zamiast tego przekazać obiekt Date.
Dario Seidl

Powyższy kod wykorzystuje wtyczkę jquery-cookie, która została wycofana na rzecz js-cookie .
Jens

2
dla wanilii JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv

12

Możesz ustawić plik cookie z datą wygaśnięcia miesiąca lub coś podobnego, a następnie ponownie przypisać plik cookie za każdym razem, gdy użytkownik ponownie odwiedza witrynę


1
To jest właściwa odpowiedź, aby ustawić nieograniczone pliki cookie. A jeśli musisz liczyć się z tym, że użytkownik nigdy nie zamyka serwisu, możesz zaimplementować dodatkowy warunek aktualizacji plików cookie przez dowolną akcję lub po pewnym czasie.
Alex Shink

9

Jeśli nie ustawisz daty wygaśnięcia, plik cookie wygaśnie po zakończeniu sesji użytkownika. Zalecam użycie daty tuż przed wydłużeniem czasu epoki unixowej przekazanej 32-bitowej liczby całkowitej. Aby umieścić to w pliku cookie, którego używałbyś document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, zakładając, że randomCookiejest to plik cookie, który ustawiasz i trueczy ma odpowiednią wartość.


2

PO PROSTU NIE MOŻESZ . Nie ma dokładnego kodu do ustawienia wiecznego pliku cookie, ale wystarczy stara sztuczka, na przykład current time + 10 years.

Tylko uwaga, że ​​wszelkie późniejsze daty January 2038skazują Cię na pliki cookie ( 32-bitowe int ), zostaną natychmiast usunięte. Życzę cudu, który zostanie naprawiony w najbliższej przyszłości. Dla 64-bitowego int , lata wokół 2110będą bezpieczne. Z biegiem czasu oprogramowanie i sprzęt będą się zmieniać i mogą nigdy nie dostosować się do starszych (tych, które mamy teraz), więc przygotuj teraz na przyszłość .

Zobacz problem z roku 2038


3
Myślę, że nie zdajesz sobie sprawy, jak daleko w przyszłość może liczyć komputer 64-bitowy , a mianowicie 292 miliardy lat
Gust van de Wal

@GustvandeWal So yeah? Już to przeczytałem. Zawarłem nawet ten link w mojej odpowiedzi.
rhavendc

1
Z Twojej odpowiedzi: Dla 64-bitowego int , lata około 2110 będą bezpieczne. Wydaje się to podejrzanie podobne do oczekiwań, że komputery 64-bitowe będą liczyć dwa razy więcej niż komputery 32-bitowe (1970 -> 2035 -> 2110)
Gust van de Wal

@GustvandeWal Przepraszam, jeśli moje słowa brzmią podejrzanie. Może to nie jest najlepszy sposób, aby powiedzieć to po angielsku. Ale hej, nie spodziewałem się ani nie pomyślałem tego rodzaju pomysłu, który właśnie powiedziałeś.
rhavendc

4
Mała uwaga: gdybyśmy używali 33-bitowych procesorów, rok 2110 miałby sens.
hegez

1

Jeśli zamierzasz odczytywać dane tylko po stronie klienta, możesz skorzystać z pamięci lokalnej. Jest usuwany dopiero po wyczyszczeniu pamięci podręcznej przeglądarki.


Albo przeglądarka jest zamknięta lub komputer jest wyłączony
Redwolf Programs

@RedwolfPrograms Od kiedy lokalna pamięć jest czyszczona po zamknięciu przeglądarki lub wyłączeniu komputera?
Igor Jerosimić

@ IgorJerosimić Ups! Chyba myślał, że z powodu błędu w miejscu kopalni ...
Redwolfie programy

-2

Możesz sprawić, by plik cookie nigdy się nie kończył, ustawiając go na dowolną datę plus jeden więcej niż bieżący rok w następujący sposób:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";

1
Wygaśnie po roku, a nie w nieskończoność (AFAIK).
Solomon Ucko,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.