Глядя на php documentation on setting a cookie Я вижу, что я могу установить дату истечения срока действия для файла cookie. Вы можете установить, что cookie истекает в конце сеанса браузера или в какой-то момент в будущем, но я не вижу способа установить, чтобы cookie никогда не истекал. Возможно ли это и как это достигается?Установите cookie, чтобы никогда не истекать
ответ
Всего печенье истекает в соответствии с cookie specification, так что это не PHP ограничения.
Используйте далекую будущую дату. Например, установить кук, который истекает через десять лет:
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
Обратите внимание, что если вы установили дату прошлого в PHP, число будет обернуть вокруг, и вы получите печенье, который истекает мгновенно.
Согласен! И я думаю, что через 20 лет веб-сайты будут далеко впереди, возможно, не будут использоваться файлы cookie. @brainimus: Просто используйте систему oldschool, которую все упомянули, - текущее время + время в далеком будущем! – jolt
Остерегайтесь, что, когда 2018 произойдет, если мы не используем 64-битный PHP, это будет охватывать 32-битное целое число и отправляться клиенту как время около нуля. (Это происходит прямо сейчас для 25-летних файлов cookie на PHP.) – Riking
@ Riking хороший улов. Время мигрировать;) –
Я считаю, что это не способ сделать печенье длиться вечно, но вам просто нужно установить его истекает далеко в будущее, такие как год 2100.
Вы не можете, но что если вы установите время истечения срока действия до + 100 лет?
Нет, потому что это превысило бы максимальное значение в январе 2038 года. – davidjbullock
Вы не должны этого делать, и это невозможно в любом случае. Если вы хотите, вы можете установить большее значение, например, на 10 лет вперед.
Кстати, я никогда не видел печенье с таким требованием :)
Хотя это не совсем возможно, вы можете сделать что-то похожее на то, что делает Google, и установить, что ваш файл cookie истекает 17 января 2038 года или что-то в таком же отдалении.
По всей практичности вам может быть лучше настроить ваш печенье на 10 лет или 60 * 60 * 24 * 365 * 10, что должно пережить большинство машин, на которых будет работать ваш печенье.
Это будет работать до начала 2028 года, после чего вы переполните значение, и файлы cookie перестанут работать. Лучше использовать абсолютное значение вместо этого. – davidjbullock
Предполагая, что его код по-прежнему будет работать на устаревших машинах в 2028 году ... Почему-то меня больше беспокоит, что каждый забудет обновить фиксированную дату ... Программное обеспечение имеет тенденцию переживать аппаратное обеспечение. –
Я не уверен, но не куки удалены в браузере закрыть? Я как-то сделал никогда не истекающий cookie и хром признал истекшую дату как «при закрытии браузера» ...
Не обязательно, если вы установите дату истечения срока действия в файле cookie, он сохранится после закрытия браузера и повторного его открытия. Если вы не установите срок действия, поведение по умолчанию будет удалено при закрытии браузера. – HoLyVieR
Моя привилегия не позволяет мне сделать мой комментарий к первому сообщению, поэтому ему придется идти здесь.
Рассмотрение должно приниматься во внимание 2038 unix bug при настройке 20 лет вперед с текущей даты, которая предлагается как правильный ответ выше.
Ваш файл cookie от 19 января 2018 года (20 лет) может поразить проблему 2038 в зависимости от браузера и версий, в которых вы работаете.
Установить далеко в будущем абсолютное время:
setcookie("CookieName", "CookieValue", 2147483647);
Лучше использовать абсолютное время, чем вычисление его по отношению к настоящему, как это рекомендовано в принятом ответе.
Максимальное значение совместимо с 32 системами битов:
2147483647 = 2^31 = ~year 2033
2 миллиарда легко запомнить, но идеальное число для $ forever будет 2^31 - 1 = 2147483647, соответствующее январю 2038 года. Это максимальное значение, чтобы избежать целочисленного переполнения ошибки 2038, как сказал @John. – David
Разве вы не можете просто сказать, бесконечный цикл, печенье истекает, как текущая дата + 1, так что никогда не попадает на дату как это должно истечь потому что это всегда завтра? Немного переборщил, но просто сказал.
+1 для ответа, подходящего для «Что сделал бы Иисус!» ;) – teodron
Собственно, у него есть точка. Просто используйте подходящий «период бездействия», скажем, 3 месяца, а затем обновление файла cookie с этим периодом по каждому запросу имеет смысл. –
@StijndeWitt Или всего 10 лет. Затем обновите его, если пользователь посещает в течение 10 лет ... – Jez
Если вы хотите сохранять данные на клиентской машине постоянно -или, по крайней мере, пока кэш браузера не опорожняется полностью, используйте Javascript локальное хранилище:
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
Не использовать хранения сессии, как это будет очищается точно так же, как cookie с максимальным временем Zero.
Максимальное значение: 2147483647
setcookie("CookieName", "CookieValue", 2147483647);
Чтобы избежать целочисленного переполнения метка времени должна быть установлена на:
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
Установка более высокого значения может вызвать проблемы со старыми браузерами.
см Также RFC about 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.
Если кэш получает значение больше наибольшего положительного целое оно может представлять, или если какой-либо из его возрастные вычисления переполнения, он ДОЛЖЕН передать заголовок Возраста со значением 21474 83648 (2^31).
- 1. Cookie не хочет истекать ASP.NET
- 2. Как установить Osmdroid, чтобы никогда не истекать плитки?
- 3. Установить уведомление о переносе Google Диска, чтобы никогда не истекать
- 4. сеанс никогда не должен истекать сам по себе
- 5. Установите пароль Windows/AD, чтобы он «никогда не истекал»?
- 6. Как установить этот файл cookie, чтобы он никогда не истекал
- 7. Как установить ссылку на ящик, чтобы никогда не истекать через API содержимого?
- 8. nodejs, как установить экспресс-сессию cookie, чтобы не истекать в любое время
- 9. Spring Session cookie никогда не истекает
- 10. Могут ли файлы cookie истекать до истечения срока действия сессии?
- 11. Установите Cookie на WOAhbar jQuery, чтобы помнить предыдущее состояние
- 12. Установить сеанс не истекать автоматически
- 13. Установите cookie из флажка, чтобы пропустить целевую страницу
- 14. Установите браузер cookie один день
- 15. Сделать печенье никогда не заканчивается angularjs
- 16. Установите cookie с использованием JavaScript, если он еще не установлен
- 17. Почему я не могу истекать с файлом cookie с JavaScript (а не HttpOnly)
- 18. Почему ключ REDIS продолжает истекать?
- 19. Я не хочу истекать почтой в gnus
- 20. Как не истекать сеанс пользователя cakephp
- 21. Установите Cookie с PHP Проверьте с Jquery
- 22. При щелчке ссылки установите HREF как cookie
- 23. Установите cookie на текстовую ссылку, нажмите
- 24. Установите два UISliders, чтобы они никогда не опускались друг за другом в быстром
- 25. Установите переменную Ruby и никогда не сможете ее изменить?
- 26. Как «истекать» сеансы в Синатре?
- 27. Установите cookie в Laravel 5+ без ответа
- 28. Установите cookie для веб-сайта с JavaScript
- 29. Установите cookie с '. Request' с .Net HttpClient
- 30. Настройка результата виртуальной процедуры никогда не истекает?
Вы не должны делать это. – Sarfraz
@sAc: Почему это плохо? – brainimus
Потому что это невозможно в любом случае в соответствии с спецификацией cookie. Он не может быть установлен, чтобы никогда не истекать. – Sarfraz