Установите, чтобы срок действия файла cookie никогда не истекал


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

 154
Author: Peter Majeed, 2010-07-20

11 answers

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

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

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

Обратите внимание, что если вы установили дату, прошедшую 2038 в PHP число будет обтекаться, и вы получите файл cookie, срок действия которого истекает мгновенно.

 218
Author: Joeri Hendrickx, 2013-08-10 01:28:15

Максимальное значение: 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

 59
Author: PiTheNumber, 2014-03-18 12:30:30

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

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

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

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

2147483647 = 2^31 = ~year 2038
 30
Author: David, 2018-09-06 20:00:12

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

Следует учитывать ошибку unix 2038 при настройке на 20 лет вперед с текущей даты, которая предлагается в качестве правильного ответа выше.

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

 13
Author: John, 2012-06-26 18:44:38

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

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

 6
Author: h3r2on, 2010-07-20 13:41:44

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

 5
Author: Jesus, 2016-04-10 18:32:04

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

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

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

 4
Author: Björn, 2012-11-14 09:55:54

Я считаю, что нет способа сделать файл cookie вечным, но вам просто нужно установить его срок действия в далеком будущем, например, в 2100 году.

 0
Author: Joel Kennedy, 2010-07-20 13:32:09

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

 0
Author: Boris Delormas, 2010-07-20 13:32:11

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

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

 0
Author: Sarfraz, 2010-07-20 13:44:02

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

 -1
Author: bluewhile, 2011-10-20 19:00:48