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

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

Все файлы cookie истекают согласно спецификации cookie , поэтому это не ограничение PHP.

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

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

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

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

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

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

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

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

 2147483647 = 2^31 = ~year 2033 

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

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

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

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

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

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

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

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

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

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

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

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

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

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