Установить cookie, чтобы никогда не истек - PullRequest
171 голосов
/ 20 июля 2010

Глядя на документацию php по настройке cookie , я вижу, что могу установить дату окончания срока действия cookie. Вы можете установить срок действия файла cookie в конце сеанса браузера или в будущем, но я не вижу способа установить, чтобы файл cookie никогда не истекал. Возможно ли это вообще и как это сделать?

Ответы [ 11 ]

237 голосов
/ 20 июля 2010

Срок действия всех файлов cookie истекает в соответствии со спецификацией файла cookie , поэтому это не ограничение PHP.

Используйте дату в далеком будущем. Например, установите cookie, срок действия которого истекает через десять лет:

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

Обратите внимание, что если вы установите дату после 2038 в 32-битном PHP, число будет изменено, и вы получите cookie, срок действия которого истекает немедленно.

65 голосов
/ 18 марта 2014

Максимальное значение: 2147483647

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

Чтобы избежать целочисленного переполнения, отметка времени должна быть установлена ​​на:

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

Установка более высокого значения может вызвать проблемы со старыми браузерами.

Также см. RFC о файлах cookie :

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.

и RFC 2616, 14,6 лет :

Если кеш получает значение больше положительного целое число, которое он может представлять, или если любой из его вычислений возраста переполнения, он ДОЛЖЕН передать заголовок Age со значением 2147483648 (2 ^ 31).

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

33 голосов
/ 27 июля 2012

Установить абсолютное время в далеком будущем :

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

Лучше использовать абсолютное время, чем рассчитывать его относительно настоящего, как рекомендуется в принятом ответе.

Максимальное значение, совместимое с 32-битными системами:

2147483647 = 2^31 = ~year 2038
13 голосов
/ 26 июня 2012

Моя привилегия не позволяет мне комментировать первый пост, поэтому он должен будет перейти сюда.

Необходимо учитывать 2038 ошибка Unix при установке на 20 лет раньше текущей даты, которая является правильным ответом выше.

Ваш файл cookie от 19 января 2018 года + (20 лет) вполне может решить проблему 2038 года, в зависимости от браузера и / или версий, на которых вы в конечном итоге работаете.

6 голосов
/ 29 августа 2012

Разве вы не можете просто сказать бесконечный цикл, cookie истекает как текущая дата + 1, поэтому он никогда не достигает даты, на которую он должен истечь, потому что это всегда завтра? Немного излишне, но просто говорю.

6 голосов
/ 20 июля 2010

Хотя это не совсем возможно, вы можете сделать что-то похожее на то, что делает Google, и установить срок действия ваших файлов cookie до 17 января 2038 года или что-то такое же далекое.

На практике вам лучше установить cookie на 10 лет или 60 * 60 * 24 * 365 * 10, что должно пережить большинство машин, на которых будет работать ваш cookie.

4 голосов
/ 14 ноября 2012

Если вы хотите сохранить данные на клиентском компьютере постоянно - или хотя бы до полного опустошения кэша браузера, используйте локальное хранилище Javascript:

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

Не используйте хранилище сеансов, так как оно будет очищено, как cookie с максимальным возрастом 0.

0 голосов
/ 20 октября 2011

Я не уверен, но куки не удаляются при закрытии браузера? Я каким-то образом сделал файл cookie с истекающим сроком действия, и Chrome распознал дату окончания срока действия как "при закрытии браузера" ...

0 голосов
/ 20 июля 2010

Вы не должны этого делать, и это все равно невозможно, если хотите, вы можете установить большее значение, например, на 10 лет вперед.

Кстати, я никогда не видел cookie с таким требованием:)

0 голосов
/ 20 июля 2010

Вы не можете, но что, если вы установите время истечения сейчас + 100 лет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...