En regardant le php documentation on setting a cookie Je vois que je peux définir une date d'expiration pour le cookie. Vous pouvez définir le cookie pour qu'il expire à la fin de la session du navigateur ou à un moment donné dans le futur, mais je ne vois pas comment régler le cookie pour qu'il n'expire jamais. Est-ce même possible et comment cela est-il accompli?Définir un cookie pour ne jamais expirer
Répondre
Tous les cookies expirent conformément au cookie specification, donc ce n'est pas une limitation de PHP.
Utilisez une date future éloignée. Par exemple, définir un cookie qui expire en dix ans:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
Notez que si vous définissez une date passée en PHP, le nombre se terminera autour et vous aurez un cookie qui expire instantanément.
D'accord! Et je pense que dans 20 ans, les sites Web seront loin, que peut-être pas de cookies seront utilisés .. @brainimus: Il suffit d'utiliser tout le monde système oldschool mentionné - heure actuelle + temps dans un avenir lointain! – jolt
Prenez garde que quand 2018 arrive, si nous ne sommes pas en PHP 64 bits, que cela va enrouler autour de l'entier de 32 bits et sont envoyés au client comme un temps proche de zéro. (Ceci se produit actuellement pour les cookies de 25 ans sur PHP.) – Riking
@Riking bonne prise. Temps de migrer;) –
Je crois qu'il n'y a pas un moyen de faire un cookie durer pour toujours, mais il faut juste qu'il devait expirer loin dans l'avenir, comme l'année 2100.
Vous ne pouvez pas, mais ce si vous définissez le délai d'expiration à maintenant + 100 ans?
Non, car cela dépasserait la valeur maximale en janvier 2038. – davidjbullock
Vous ne devriez pas faire cela et ce n'est pas possible de toute façon, Si vous voulez, vous pouvez définir une valeur plus grande comme 10 ans à venir.
D'ailleurs, je n'ai jamais vu un cookie avec cette exigence :)
Bien que ce ne soit pas exactement possible, vous pouvez faire quelque chose de similaire à ce que Google fait et mettre votre cookie à expiration le 17 janvier 2038 ou quelque chose d'aussi éloigné.
En pratique, il vaudrait peut-être mieux régler votre cookie pendant 10 ans ou 60 * 60 * 24 * 365 * 10, ce qui devrait surpasser la plupart des machines sur lesquelles vivra votre cookie.
Cela fonctionnera jusqu'au début de 2028, à quel point vous déborderez la valeur et les cookies cesseront de fonctionner. Mieux vaut utiliser une valeur absolue à la place. – davidjbullock
En supposant que son code fonctionnera encore sur des machines obsolètes en 2028 ... D'une certaine manière je suis plus inquiet que tout le monde oublie de mettre à jour la date fixe ... Les logiciels ont tendance à survivre au matériel. –
Je ne suis pas sûr mais ne sont pas des cookies supprimés à la fermeture du navigateur? Je l'ai fait en quelque sorte un cookie ne venant à échéance et le chrome reconnu comme la date a expiré « au navigateur fermer » ...
Pas nécessairement, si vous définissez une date d'expiration sur le cookie, il survivra après que vous fermez votre navigateur et rouvrez-le. Si vous ne définissez pas d'expiration, le comportement par défaut sera supprimé lorsque vous fermez votre navigateur. – HoLyVieR
Mon privilège me permet de faire mon commentaire sur le premier message de sorte qu'il devra aller ici.
La prise en compte de 2038 unix bug doit être prise en compte lors de la configuration 20 ans à l'avance à partir de la date actuelle, ce qui constitue la bonne réponse ci-dessus.
Votre cookie du 19 janvier 2018 + (20 ans) pourrait bien rencontrer un problème 2038 selon le navigateur et/ou les versions que vous finissez par utiliser.
Définir un futur lointain temps absolu:
setcookie("CookieName", "CookieValue", 2147483647);
Il est préférable d'utiliser un temps absolu de le calculer par rapport à la présente comme recommandé dans la réponse acceptée.
La valeur maximale compatible avec les systèmes 32 bits est:
2147483647 = 2^31 = ~year 2033
2 milliards est facile à retenir mais le nombre idéal pour $ forever serait 2^31 - 1 = 2147483647 correspondant à janvier 2038. C'est la valeur maximale pour éviter le débordement d'entier du bogue de 2038 comme l'a dit @John. – David
Tu ne peux pas juste dire une boucle sans fin, cookie expire que la date actuelle + 1 afin qu'elle touche jamais la date est censé expirer le parce que c'est toujours demain? Un peu exagéré mais juste en train de dire.
+1 pour une réponse appropriée à "Que ferait Jésus?" ;) – teodron
En fait, il a un point. Le simple fait d'utiliser une «période d'inactivité» appropriée de, disons, 3 mois, puis de rafraîchir le cookie avec cette période à chaque demande est logique. –
@StijndeWitt Ou seulement 10 ans. Puis mettez-le à jour si l'utilisateur visite dans les 10 ans ... – Jez
Si vous souhaitez conserver des données sur la machine cliente de façon permanente -ou au moins jusqu'à ce que le cache du navigateur est vidé complètement, utilisez Javascript stockage local:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
Ne pas utiliser le stockage de session, il sera effacé comme un cookie avec un âge maximum de zéro.
Valeur maximale: 2147483647
setcookie("CookieName", "CookieValue", 2147483647);
Pour éviter tout débordement d'entier l'horodatage doit être réglé sur:
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
Définition d'une valeur plus élevée peut causer des problèmes avec les anciens navigateurs.
Voir aussi la RFC about 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.
Si un cache reçoit une valeur plus grande que le plus grand entier positif qu'elle peut représenter, ou si l'un des ses calculs d'âge trop-pleins, il doit transmettre un en-tête d'âge avec une valeur de 21474 83648 (2^31).
- 1. Comment supprimer/supprimer/expirer un cookie immédiatement?
- 2. La session ne devrait jamais expirer par elle-même
- 3. Comment expirer un cookie en 30 minutes en utilisant jQuery?
- 4. Travailler avec DirectoryEntry pas sur un domaine, définir le mot de passe de l'utilisateur ne jamais expirer
- 5. Pourquoi ne puis-je pas définir un cookie et rediriger?
- 6. Pouvez-vous définir un cookie uniquement pour domain.tld et www.domain.tld?
- 7. Comment définir un cookie pour une requête web dans Silverlight
- 8. Un cookie peut-il expirer lorsque l'un ou l'autre passe un certain temps OU le navigateur est fermé?
- 9. Comment définir un cookie avec un composant middleware (ruby) rack?
- 10. Scandir ne renvoie jamais
- 11. RegExpValidator ne correspond jamais
- 12. DeviceAttached un message ne vient jamais
- 13. Comment faire pour expirer manuellement un compte de connexion SQL?
- 14. Définir un contexte pour un enfant directs de corps est jamais sélectionné avec jQuery
- 15. Session expirer en PHP
- 16. Fonction Javascript pour définir la valeur de cookie
- 17. LINQ et .COUNT expirer
- 18. JQuery extension cookie sera mis un cookie avec un chemin, mais ne sera pas lu
- 19. Comment expirer un utilisateur ASP.NET MVC connecté?
- 20. DROP INDEX ne finit jamais
- 21. Est-il possible de définir plus d'un cookie avec un seul Set-Cookie?
- 22. comment définir la date d'expiration sur un cookie dans cfscript
- 23. valeur Cookie pour définir le style à la page charge
- 24. TaskScheduler.UnobservedTaskException ne sera jamais appelé
- 25. Créer un cookie pour NSURLRequest?
- 26. Android: onTouch() ne s'appelle jamais?
- 27. Comment définir un cookie dans le portlet Liferay?
- 28. Impossible de définir un cookie dans Chrome 5
- 29. Définir la date d'expiration pour cookie de domaine différent
- 30. Comment expirer une caches_action avec un cache_path?
Vous ne devriez pas faire cela. – Sarfraz
@sAc: Pourquoi est-ce une mauvaise chose? – brainimus
Parce que cela n'est pas possible selon la spécification des cookies. Il ne peut pas être configuré pour ne jamais expirer. – Sarfraz