Установите cookie, чтобы никогда не истекать

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

2147483647 = 2^31 = ~year 2038

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

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

Ответ 11

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