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.