Установите, чтобы срок действия файла cookie никогда не истекал
Просматривая документацию php по настройке файла cookie, я вижу, что могу установить дату истечения срока действия файла cookie. Вы можете установить срок действия файла cookie в конце сеанса браузера или в какой-то момент в будущем, но я не вижу способа установить, чтобы срок действия файла cookie никогда не истекал. Возможно ли это вообще и как это достигается?
11 answers
Срок действия всех файлов cookie истекает в соответствии со спецификацией файлов cookie , так что это не ограничение PHP.
Используйте дату в далеком будущем. Например, установите файл cookie, срок действия которого истекает через десять лет:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
Обратите внимание, что если вы установили дату, прошедшую 2038 в PHP число будет обтекаться, и вы получите файл cookie, срок действия которого истекает мгновенно.
Максимальное значение: 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).
Установите абсолютное время далекого будущего:
setcookie("CookieName", "CookieValue", 2147483647);
Лучше использовать абсолютное время, чем вычислять его относительно настоящего, как рекомендовано в принятом ответе.
Максимальное значение, совместимое с 32-разрядными системами, составляет:
2147483647 = 2^31 = ~year 2038
Моя привилегия не позволяет мне комментировать первый пост, поэтому его придется поместить здесь.
Следует учитывать ошибку unix 2038 при настройке на 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 с максимальным нулевым возрастом.
Я считаю, что нет способа сделать файл cookie вечным, но вам просто нужно установить его срок действия в далеком будущем, например, в 2100 году.
Вы не можете, но что, если вы установите время истечения срока действия на сейчас + 100 лет?
Вы не должны этого делать, и в любом случае это невозможно, если вы хотите, вы можете установить большее значение, например, на 10 лет вперед.
Кстати, я никогда не видел cookie с таким требованием:)
Я не уверен, но разве файлы cookie не удаляются при закрытии браузера? Я каким-то образом сделал файл cookie с никогда не истекающим сроком действия, и chrome распознал дату истечения срока действия как "при закрытии браузера"...