Установите куки никогда не истекает



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

767   11  

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.

и в RFC 2616, 14.6 возраст:

Если кэш получает значение больше самого большого положительного целое оно может представляют, или если какой-либо из его возрастных расчетов переполняется, он должен передать заголовок Age со значением 2147483648 (2^31).

http://www.faqs.org/rfcs/rfc2616.html

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

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 году.

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

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

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

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

Comments

    Ничего не найдено.