Глядя на php-документацию по настройке файла cookie Я вижу, что я могу установить дату истечения срока действия 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.
Если кеш получает значение, большее, чем наибольшее положительное целое число, которое он может представлять, или если какой-либо из его возрастных вычислений переполнения, он ДОЛЖЕН передать заголовок Age со значением 2147483648 (2 ^ 31).
Ответ 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, и хром признал истекшую дату как "при закрытии браузера"...