Javascript Cookie без срока действия


150

Я хотел бы создать куки, срок действия которых не истекает. Возможно ли это вообще?

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

Я не хочу делать дату действительно большой, мне просто интересно, было ли значение параметра expires в cookie, которое говорило, что он никогда не истечет.

Спасибо.


1
Почему бы тебе не сделать дату большой?
AnthonyWJones,

13
увеличение даты свидания заставляет меня чувствовать, что я обманываю. Если это единственный способ пойти, думаю, мне придется сделать дату большой.
Хосе Вега,

Ответы:


179

Неа. Это невозможно. Лучший способ сделать это - просто установить срок годности как 2100.


37
Осталось всего четыре года. Надеюсь, вы обновили файл cookie.
antony.ouseph.k

171
2020 - год печенья покалипсиса
Джеффри Пиа

18
Блин, с каждым годом все ближе, надеюсь ваш код обновился.
kartsims 08

28
Сейчас он отредактирован до 2030 года, мы откладываем нашу гибель еще на 10 лет
Симеон Наков

7
Итак, по сути, 19 января 2038 года Чуи сядет в «Тысячелетний сокол» и снова будет жаловаться на всплывающее окно политики
файлов

110

Нет синтаксиса для того, что вы хотите. Если параметр не истекает, срок действия cookie истекает в конце сеанса. Единственный вариант - выбрать произвольно большое значение. Имейте в виду, что у некоторых браузеров есть проблемы с датами после 2038 года (когда время эпохи unix превышает 32-битное int).


28
2038-01-19, если быть точным, 03:14:08 UTC.
Вильгельм Клопп

Просто чтобы уточнить: действует ли это правило одинаково во всех браузерах? Это означает, что если я не установлю дату истечения срока действия, cookie будет длиться только до конца сеанса.
Silver Ringvee

2
Файл cookie, созданный без директивы Expiresили, Max-Ageявляется файлом cookie сеанса: он удаляется при завершении работы клиента. Однако веб-браузеры могут использовать восстановление сеанса , что делает большинство файлов cookie сеанса постоянными, как если бы браузер никогда не закрывался. ( источник: MDN )
mfluehr

68

Вы можете сделать это в качестве примера в документации Mozilla :

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

PS

Конечно, возникнет проблема, если человечество все еще будет использовать ваш код в первую минуту 10000 года :)


96
Ты уверен, что сегодня пятница?
Дэвид


5
У меня не получилось использовать npmjs.com/package/universal-cookie . Пошел с решением 2038 года . Я написал билет, чтобы вернуться в 2030 году, чтобы посмотреть, есть ли исправление.
Hinrich

15

Срок действия всех файлов cookie истекает в соответствии со спецификацией файлов cookie. Максимальное значение, которое вы можете установить:

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

Таким образом, максимальное время жизни cookie составляет

$.cookie('subscripted_24', true, { expires: 2147483647 });

8
Этот номер мне не подходит. После небольшого количества проб и ошибок максимальное число, которое я смог использовать, было 99983090 (истекает = пт, 12 сентября 275760 18:10:24 по Гринвичу). Все, что выше, возвращало "Invalid Date"
JeffreyPia

Если вы передадите число в качестве параметра expires в jquery-cookie или js-cookie, срок действия истечет в днях. Если вам нужна фиксированная дата, вы должны вместо этого передать объект Date.
Дарио

1
В приведенном выше коде используется плагин jquery-cookie, который был заменен на js-cookie .
Йенс

2
для vanilla JS:document.cookie = 'subscripted_24=true; expires=' + new Date(2147483647 * 1000).toUTCString();
Оксана Романив

12

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


1
Это правильный ответ для установки бесконечного количества файлов cookie. А если нужно учесть, что пользователь никогда не закрывает сайт, можно реализовать дополнительное условие для обновления файлов cookie любым действием или по прошествии определенного времени.
Alex Shink

10

Если вы не установите срок действия, cookie истечет в конце сеанса пользователя. Я рекомендую использовать дату прямо перед тем, как время эпохи unix продлится до 32-битного целого числа. Чтобы поместить это в файл cookie, который вы использовали бы document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, предполагая, что randomCookieэто файл cookie, который вы устанавливаете, и trueего соответствующее значение.


2

ВЫ ПРОСТО НЕ МОЖЕТЕ . Не существует точного кода для установки файла cookie навсегда, но подойдет старый трюк, например current time + 10 years.

Просто обратите внимание, что любые даты, кроме того, January 2038будут обречены на то, что файлы cookie ( 32-битное int ) будут немедленно удалены. Желаю чуда, которое будет исправлено в ближайшем будущем. Для 64-битных int годы 2110будут безопасными. С течением времени, программное обеспечение и аппаратные средства будут меняться и никогда не могут приспособиться к более старым (то , что мы имеем сейчас) , чтобы подготовить в настоящее время в будущем .

См. Проблему 2038 года


3
Я думаю, вы не представляете, как далеко в будущее может рассчитывать 64-битный компьютер , а именно 292 миллиарда лет
Густ ван де Валь

@GustvandeWal Так да? Я это уже читал. Я даже включил эту ссылку в свой ответ.
rhavendc

1
Из вашего ответа: для 64-битного int безопасным будет около 2110 года. Это подозрительно похоже на то, как вы ожидаете, что 64-битные компьютеры будут считаться вдвое больше, чем 32-битные компьютеры (1970 -> 2035 -> 2110)
Густ ван де Валь,

@GustvandeWal Извините, если мои слова звучат подозрительно. Может быть, это не лучший способ сказать это по-английски. Но эй, я не ожидал и не думал о такой мысли, которую ты только что сказал.
rhavendc

4
Небольшое замечание: если бы мы использовали 33-битные процессоры, то 2110 год имел бы смысл.
hegez 08

1

Если вы собираетесь читать данные только со стороны клиента, вы можете использовать локальное хранилище. Он удаляется только после очистки кеша браузера.


Или браузер закрыт, или компьютер выключен
Redwolf Programs

@RedwolfPrograms С каких это пор локальное хранилище очищается при закрытии браузера или выключения компьютера?
Игорь Еросимич

@ IgorJerosimić Упс! Думаю, я думал, что из-за ошибки на моем сайте ...
Redwolf Programs

-2

Вы можете сделать cookie никогда не заканчиваться, установив для него любую дату плюс на один больше, чем текущий год, например:

var d = new Date();    
document.cookie = "username=John Doe; expires=Thu, 18 Dec " + (d.getFullYear() + 1) + " 12:00:00 UTC";

1
Срок его действия истекает через год, а не бесконечно (AFAIK).
Соломон Учко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.