215 votes

Définir un cookie expire jamais

Regarder la documentation de php sur la définition d’un cookie , je vois que je peux mettre une date d’expiration du cookie. Vous pouvez définir le cookie expire à la fin de la session du navigateur ou à un certain moment dans l’avenir, mais je ne vois pas un moyen de définir le remplacement du cookie n’expirent jamais. Est-ce même possible et comment cela est réalisé ?

282voto

Joeri Hendrickx Points 6957

Tous les cookies expirent conformément à la spécification de cookie, donc ce n’est pas une limitation de PHP.

Utiliser une date bien ultérieure. Par exemple, définir un cookie qui expire en dix ans :

Notez que si vous définissez une date dernières 2038 en PHP, le nombre se terminera autour et vous obtiendrez un cookie qui expire instantanément.

93voto

PiTheNumber Points 8264

Valeur maximale: 2147483647

setcookie("CookieName", "CookieValue", 2147483647);

Pour éviter le débordement d'entier l'horodatage doit être réglée à:

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

Réglage d'une valeur plus élevée peut causer des problèmes avec les anciens navigateurs.

Voir aussi la RFC sur les cookies:

Max-Age=value
  OPTIONAL.  The value of the Max-Age attribute is delta-seconds,
  the lifetime of the cookie in seconds, a decimal non-negative
  integer.  To handle cached cookies correctly, a client SHOULD
  calculate the age of the cookie according to the age calculation
  rules in the HTTP/1.1 specification [RFC2616].  When the age is
  greater than delta-seconds seconds, the client SHOULD discard the
  cookie.  A value of zero means the cookie SHOULD be discarded
  immediately.

et la RFC 2616, 14.6 Âge:

Si un cache reçoit une valeur plus grande que le plus grand positif entier qu'elle peut représenter, ou si l'un de son âge calculs des débordements, il DOIT transmettre un Âge d'en-tête avec une valeur de 2147483648 (2^31).

http://www.faqs.org/rfcs/rfc2616.html

44voto

David Points 566

Pourquoi l’obtention du cookie par rapport à l’heure actuelle ?... utiliser une valeur absolue.

2 milliards = année 2033 :

14voto

John Points 144

Mon privilège empêche de me faire mon commentaire sur le premier post, donc il faudra aller ici.

Examen doit tenir compte de 2038 bug unix lors de la définition de 20 ans à l’avance à la date actuelle est suggèrent que la bonne réponse ci-dessus.

Votre cookie le 19 janvier 2018 + (20 ans) pourrait bien frapper 2038 problème selon le navigateur et ou vous vous retrouvez en cours d’exécution des versions.

5voto

h3r2on Points 154

Alors que ce n’est pas exactement possible, vous pourriez faire quelque chose de semblable à ce que Google et définie votre cookie expire le 17 Janvier 2038 ou quelque chose de tout aussi loin.

En toute praticité, vous pourriez être mieux lotis définissant votre cookie pendant 10 ans ou 60 60 24 365 10, qui devrait survivre à la plupart des machines que vivra votre cookie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X