Установите куки никогда не истекает
смотреть на!--1-->PHP документация по настройке cookie Я вижу, что я могу установить дату истечения срока действия куки. Вы можете установить срок действия файла cookie в конце сеанса браузера или в какое-то время в будущем, но я не вижу способа установить срок действия файла cookie никогда. Возможно ли это вообще и как это достигается?
11 ответов:
все куки истекают в соответствии с спецификация печенье, Так что это не ограничение 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 о cookies:
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
моя привилегия не позволяет мне комментировать первый пост, поэтому он должен будет пойти сюда.
рассмотрение должно быть принято во внимание 2038 ошибка unix при установке 20 лет вперед от текущей даты, который предлагаю в качестве правильного ответа.
ваш cookie на 19 января 2018 года + (20 лет) вполне может ударить 2038 проблема в зависимости от браузера и или версии вы в конечном итоге работает.
хотя это не совсем возможно, вы могли бы сделать что-то похожее на то, что делает Google, и установить срок действия вашего cookie 17 января 2038 года или что-то столь же далекое.
при всей практичности вам может быть лучше установить куки на 10 лет или 60*60*24*365*10, который должен пережить большинство машин, на которых будет жить ваш cookie.
не можете ли вы просто сказать бесконечный цикл, cookie истекает как текущая дата + 1, поэтому он никогда не попадает в дату, на которую он должен истекать, потому что это всегда завтра? Немного перебор, но просто говорю.
Если вы хотите сохранить данные на клиентской машине постоянно -или, по крайней мере, до тех пор, пока кэш браузера не будет полностью очищен, используйте локальное хранилище Javascript:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
Не используйте хранилище сеансов, так как оно будет очищено так же, как файл cookie с максимальным возрастом ноль.
Я считаю, что нет способа сделать печенье длиться вечно, но вам просто нужно установить его истекает далеко в будущем, например, в 2100 году.
вы не должны этого делать, и это невозможно в любом случае, если вы хотите, вы можете установить большее значение, например, на 10 лет вперед.
кстати, я никогда не видел куки с таким требованием:)
Я не уверен, но куки не удаляются при закрытии браузера? Я как-то сделал никогда не истекающий cookie, и chrome распознал истекшую дату как "при закрытии браузера" ...
Comments