Cookie Javascript sans date d'expiration

143

Je souhaite configurer un cookie qui n'expire jamais. Serait-ce même possible?

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

Je ne veux pas rendre la date vraiment grande, je me demande simplement s'il y avait une valeur pour le paramètre expires sur le cookie qui lui a dit de ne jamais expirer.

Merci.

José Vega
la source
1
Pourquoi ne voulez-vous pas que la date soit grande?
AnthonyWJones
13
rendre la date grande me donne l'impression de tricher. Si c'est la seule façon de procéder, je suppose que je devrai faire une grande date.
Jose Vega

Réponses:

170

Nan. Cela ne peut pas être fait. La meilleure `` façon '' de le faire est simplement de faire en sorte que la date d'expiration soit 2100.

Paolo Bergantino
la source
32
Il ne reste plus que quatre ans. J'espère que vous avez mis à jour le cookie.
antony.ouseph.k
161
2020 - l'année du cookiepocalypse
JeffreyPia
15
Merde, ça se rapproche chaque année, j'espère que votre code a été mis à jour.
kartsims
23
Il est édité à l' horizon 2030 maintenant, nous remettre à plus tard nos Doom 10 années
Simeon Nakov
7
Donc, en gros, le 19 janvier 2038, Chewie va s'asseoir dans le Millennium Falcon et se plaindre de la fenêtre contextuelle de politique de cookie sur l'API de la carte galactique encore une fois ...
nickhar
108

Il n'y a pas de syntaxe pour ce que vous voulez. Si le paramètre n'expire pas, le cookie expire à la fin de la session. La seule option est de choisir une valeur arbitrairement grande. Sachez que certains navigateurs ont des problèmes avec les dates postérieures à 2038 (lorsque l'heure de l'époque Unix dépasse un int 32 bits).

Jamie
la source
25
2038-01-19, 03:14:08 UTC, pour être précis.
Wilhelm Klopp
Juste pour clarifier: est-ce une règle, qui fonctionne de la même manière dans tous les navigateurs? ce qui signifie que si je ne fixe pas la date d'expiration, le cookie ne durera que jusqu'à la fin de la session.
Silver Ringvee
2
Un cookie créé sans directive Expiresou Max-Ageest un cookie de session: il est supprimé lorsque le client s'arrête. Cependant, les navigateurs Web peuvent utiliser la restauration de session , ce qui rend la plupart des cookies de session permanents, comme si le navigateur n'était jamais fermé. ( source: MDN )
mfluehr
67

Vous pouvez faire comme exemple sur la documentation Mozilla :

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

PS

Bien sûr, il y aura un problème si l'humanité utilise toujours votre code à la première minute de l'année 10000 :)

Nimir
la source
89
Êtes-vous sûr que c'est un vendredi?
David
8
google.com/... *
Adam Nelson
5
Cela n'a pas fonctionné pour moi en utilisant npmjs.com/package/universal-cookie . Je suis allé avec la solution de l' année 2038 . J'ai écrit un ticket pour revenir en 2030 pour voir s'il y a un correctif.
Hinrich
15

Tous les cookies expirent conformément à la spécification des cookies , la valeur maximale que vous pouvez définir est

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

La durée de vie maximale des cookies est donc

$.cookie('subscripted_24', true, { expires: 2147483647 });
Yuseferi
la source
7
Ce nombre n'a pas fonctionné pour moi. Après quelques essais et erreurs, le nombre le plus élevé que j'ai pu utiliser était 99983090 (expire = ven, 12 sept 275760 18:10:24 GMT). Tout ce qui est supérieur a renvoyé "Date invalide"
JeffreyPia
Si vous transmettez un nombre en tant que paramètre d'expiration à jquery-cookie ou js-cookie, cela prend comme jours l'expiration à partir de maintenant. Si vous voulez une date fixe, vous devez passer un objet Date à la place.
Dario Seidl
Le code ci-dessus utilise le plugin jquery-cookie qui a été retiré au profit de js-cookie .
Jens
2
pour vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Oksana Romaniv
12

Vous pouvez éventuellement définir un cookie à une date d'expiration d'un mois ou quelque chose du genre, puis réaffecter le cookie à chaque fois que l'utilisateur visite à nouveau le site Web.

Liam Martens
la source
1
C'est la bonne réponse pour définir des cookies sans fin. Et si vous devez tenir compte du fait que l'utilisateur ne ferme jamais le site, vous pouvez mettre en place une condition supplémentaire de mise à jour des cookies par n'importe quelle action ou après un certain temps.
Alex Shink
10

Si vous ne définissez pas de date d'expiration, le cookie expirera à la fin de la session de l'utilisateur. Je recommande d'utiliser la date juste avant que l'heure de l'époque Unix ne s'étende avec un entier 32 bits. Pour le mettre dans le cookie que vous utiliseriez document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, en supposant que randomCookiec'est le cookie que vous définissez et truesa valeur respective.

Benjamin Easterling
la source
2

VOUS NE POUVEZ PAS . Il n'y a pas de code exact à utiliser pour définir un cookie permanent, mais une vieille astuce fera l'affaire, comme current time + 10 years.

Juste une note que toutes les dates au January 2038- delà vous seront condamnés pour les cookies ( 32 bits int ) seront supprimés instantanément. Souhaite un miracle qui sera corrigé dans un proche avenir. Pour les int 64 bits , des années 2110seront sûres. Au fil du temps, les logiciels et le matériel changeront et ne s'adapteront peut-être jamais aux anciens (les choses que nous avons maintenant), alors préparez le maintenant pour l' avenir .

Voir le problème de l'année 2038

rhavendc
la source
3
Je pense que vous ne réalisez pas à quel point un ordinateur 64 bits peut compter dans le futur , à savoir 292 milliards d'années
Gust van de Wal
@GustvandeWal Alors oui? J'ai déjà lu ça. J'ai même inclus ce lien dans ma réponse.
rhavendc
1
D'après votre réponse: pour les int 64 bits , les années autour de 2110 seront sûres. Cela ressemble étrangement à ce que vous vous attendez à ce que les ordinateurs 64 bits comptent deux fois plus que les ordinateurs 32 bits (1970 -> 2035 -> 2110)
Gust van de Wal
@GustvandeWal Désolé si mes propos semblent suspects. Ce n'est peut-être pas la meilleure façon de le dire en anglais. Mais bon, je ne m'attendais pas ou je ne pensais pas à ce genre d'idée que vous venez de dire.
rhavendc
4
Une petite note: si nous utilisions des processeurs 33 bits, alors l'année 2110 aurait du sens.
hegez
1

Si vous avez l'intention de lire les données uniquement du côté client, vous pouvez utiliser le stockage local. Il est supprimé uniquement lorsque le cache du navigateur est effacé.

jfhfhf839
la source
Ou le navigateur est fermé ou l'ordinateur est arrêté
Programmes Redwolf
@RedwolfPrograms Depuis quand le stockage local est-il effacé lorsque le navigateur se ferme ou que l'ordinateur s'arrête?
Igor Jerosimić
@ IgorJerosimić Oups! Je suppose que je pensais qu'à cause d'un bogue dans un de mes sites ...
Programmes Redwolf
-2

Vous pouvez faire en sorte qu'un cookie ne se termine jamais en le définissant à n'importe quelle date plus un de plus que l'année en cours comme ceci:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";
Jak
la source
1
Il expirera au bout d'un an et ne durera pas indéfiniment (AFAIK).
Solomon Ucko