Javascript Cookie ohne Ablaufdatum

142

Ich möchte einen Cookie einrichten, der niemals abläuft. Wäre das überhaupt möglich?

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

Ich möchte das Datum nicht wirklich groß machen. Ich frage mich nur, ob es einen Wert für den Parameter expires auf dem Cookie gibt, der besagt, dass es niemals ablaufen soll.

Vielen Dank.

Jose Vega
quelle
1
Warum willst du das Datum nicht groß machen?
AnthonyWJones
13
Wenn ich das Date groß mache, habe ich das Gefühl, als würde ich betrügen. Wenn das der einzige Weg ist, muss ich das Datum wohl groß machen.
Jose Vega

Antworten:

169

Nee. Kann nicht gemacht werden. Die Art und Weise, dies zu tun, besteht darin, das Ablaufdatum auf 2030 festzulegen.

Paolo Bergantino
quelle
31
Nur noch vier Jahre. Ich hoffe, Sie haben den Cookie aktualisiert.
antony.ouseph.k
160
2020 - das Jahr der Cookiepocalypse
JeffreyPia
14
Verdammt, es kommt jedes Jahr näher, ich hoffe dein Code wurde aktualisiert.
Kartsims
22
Es ist jetzt bis 2030 bearbeitet, wir verschieben unser Schicksal um weitere 10 Jahre
Simeon Nakov
7
Im Grunde genommen wird Chewie am 19. Januar 2038 im Millennium Falcon sitzen und sich erneut über das Popup der Cookie-Richtlinie auf der galaktischen Karten-API beschweren ...
Nickhar
108

Es gibt keine Syntax für das, was Sie wollen. Wenn die Einstellung nicht abläuft, läuft das Cookie am Ende der Sitzung ab. Die einzige Möglichkeit besteht darin, einen beliebig großen Wert auszuwählen. Beachten Sie, dass einige Browser Probleme mit Daten nach 2038 haben (wenn die Unix-Epochenzeit einen 32-Bit-Int überschreitet).

Jamie
quelle
25
2038-01-19, 03:14:08 UTC, um genau zu sein.
Wilhelm Klopp
Nur um zu verdeutlichen: Ist das eine Regel, die in jedem Browser gleich funktioniert? Das heißt, wenn ich das Ablaufdatum nicht festlege, hält der Cookie nur bis zum Ende der Sitzung.
Silver Ringvee
2
Ein Cookie, das ohne eine Expiresoder Max-AgeAnweisung erstellt wurde, ist ein Sitzungscookie: Es wird gelöscht, wenn der Client heruntergefahren wird. Webbrowser verwenden jedoch möglicherweise die Sitzungswiederherstellung , wodurch die meisten Sitzungscookies dauerhaft sind, als ob der Browser nie geschlossen worden wäre. ( Quelle: MDN )
mfluehr
67

Sie können als Beispiel für Mozilla-Dokumente Folgendes tun :

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

PS

Natürlich wird es ein Problem geben, wenn die Menschheit Ihren Code in der ersten Minute des Jahres 10000 noch verwendet :)

Nimir
quelle
88
Bist du sicher, dass es ein Freitag ist?
David
8
google.com/… *
Adam Nelson
5
Hat bei mir mit npmjs.com/package/universal-cookie nicht funktioniert . Ging mit der Lösung des Jahres 2038 . Ich habe ein Ticket geschrieben, um 2030 wiederzukommen, um zu sehen, ob es eine Lösung gibt.
Hinrich
15

Alle Cookies verfallen gemäß der Cookie- Spezifikation . Der maximale Wert, den Sie festlegen können, ist

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

Die maximale Lebensdauer von Cookies beträgt also

$.cookie('subscripted_24', true, { expires: 2147483647 });
Yuseferi
quelle
7
Diese Nummer hat bei mir nicht funktioniert. Nach einigem Ausprobieren war die höchste Zahl, die ich verwenden konnte, 99983090 (läuft ab = Fr, 12. September 275760 18:10:24 GMT). Alles höhere gab "Ungültiges Datum" zurück
JeffreyPia
Wenn Sie eine Zahl als Ablaufparameter an jquery-cookie oder js-cookie übergeben, dauert es ab jetzt Tage, bis sie abläuft. Wenn Sie ein festes Datum wünschen, müssen Sie stattdessen ein Datumsobjekt übergeben.
Dario Seidl
Der obige Code verwendet das jquery-cookie- Plugin, das zugunsten von js-cookie eingestellt wurde .
Jens
2
für Vanille JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv
12

Sie können möglicherweise ein Cookie auf ein Ablaufdatum von einem Monat oder so setzen und das Cookie dann jedes Mal neu zuweisen, wenn der Benutzer die Website erneut besucht

Liam Martens
quelle
1
Dies ist die richtige Antwort, um endlose Cookies zu setzen. Wenn Sie berücksichtigen müssen, dass der Benutzer die Website niemals schließt, können Sie eine zusätzliche Bedingung für die Aktualisierung von Cookies durch eine Aktion oder nach einer bestimmten Zeit implementieren.
Alex Shink
9

Wenn Sie kein Ablaufdatum festlegen, läuft das Cookie am Ende der Sitzung des Benutzers ab. Ich empfehle, das Datum unmittelbar vor der Verlängerung der Unix-Epoche um eine 32-Bit-Ganzzahl zu verlängern. Um dies in das Cookie einzufügen, das Sie verwenden würden document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, vorausgesetzt, es randomCookiehandelt sich um das von Ihnen gesetzte Cookie und trueden entsprechenden Wert.

Benjamin Easterling
quelle
2

SIE KÖNNEN NUR NICHT . Es gibt keinen genauen Code zum Setzen eines Cookies für immer, aber ein alter Trick reicht auscurrent time + 10 years .

Nur ein Hinweis, dass alle darüber hinausgehenden Daten January 2038Sie für die Cookies ( 32-Bit-Int ) zum Scheitern verurteilt haben, wird sofort gelöscht. Wünschen Sie sich ein Wunder, dass dies in naher Zukunft behoben wird. Für 64-Bit-Int sind Jahre 2110sicher. Mit der Zeit werden sich Software und Hardware ändern und sich möglicherweise nie an ältere anpassen (die Dinge, die wir jetzt haben). Bereiten Sie das Jetzt auf die Zukunft vor .

Siehe Problem des Jahres 2038

rhavendc
quelle
3
Ich denke, Sie wissen nicht, wie weit in die Zukunft ein 64-Bit-Computer zählen kann , nämlich 292 Milliarden Jahre
Gust van de Wal
@GustvandeWal Also ja? Das habe ich schon gelesen. Ich habe diesen Link sogar in meine Antwort aufgenommen.
Rhavendc
1
Aus Ihrer Antwort: Für 64-Bit-Int sind Jahre um 2110 sicher. Dies scheint verdächtig ähnlich zu sein, als würden Sie erwarten, dass 64-Bit-Computer doppelt so weit zählen wie 32-Bit-Computer (1970 -> 2035 -> 2110)
Gust van de Wal
@GustvandeWal Entschuldigung, wenn meine Worte verdächtig klingen. Vielleicht ist es nicht der beste Weg, es auf Englisch zu sagen. Aber hey, ich habe diese Idee, die Sie gerade gesagt haben, nicht erwartet oder gedacht.
Rhavendc
4
Ein kleiner Hinweis: Wenn wir 33-Bit-Prozessoren verwenden würden, wäre das Jahr 2110 sinnvoll.
Hegez
1

Wenn Sie die Daten nur von der Clientseite lesen möchten, können Sie den lokalen Speicher verwenden. Es wird nur gelöscht, wenn der Cache des Browsers geleert wird.

jfhfhf839
quelle
Oder der Browser ist geschlossen oder der Computer ist heruntergefahren
Redwolf Programs
@RedwolfPrograms Seit wann wird der lokale Speicher gelöscht, wenn der Browser geschlossen oder der Computer heruntergefahren wird?
Igor Jerosimić
@ IgorJerosimić Ups! Ich denke, ich dachte, dass wegen eines Fehlers in einer meiner
Seiten
-2

Sie können ein Cookie niemals beenden, indem Sie es auf ein beliebiges Datum plus eines mehr als das aktuelle Jahr wie folgt einstellen:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";
Jak
quelle
1
Es läuft nach einem Jahr ab und dauert nicht auf unbestimmte Zeit (AFAIK).
Solomon Ucko