Cookie Javascript без дати закінчення терміну придатності


143

Я хотів би встановити печиво, яке ніколи не закінчується. Чи можливо це навіть можливо?

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

Я не хочу робити дату справді великою, мені просто цікаво, чи було значення для параметра cookie на файлі cookie, яке сказало, що воно не закінчується.

Дякую.


1
Чому ви не хочете зробити дату великою?
AnthonyWJones

13
зробивши побачення великим, я відчуваю, ніби мене обманюють. Якщо це єдиний шлях, я думаю, що мені доведеться зробити дату великою.
Хосе Вега

Відповіді:


170

Ні. Неможливо зробити. "Спосіб" цього - просто зробити термін придатності таким, як 2030 рік.


31
Ще чотири роки. Сподіваюся, ви оновили файл cookie.
antony.ouseph.k

160
2020 - рік cookiepocalypse
JeffreyPia

14
Чорт, з кожним роком все ближче, сподіваюся, ваш код оновлено.
kartsims

22
Він відредагований на 2030 рік, ми відкладаємо свою приреченість ще на 10 років
Симеон Наков

7
Отже, 19 січня 2038 року Чеві сяде в Сокіл тисячоліття та ще раз
поскаржиться на появу

108

Немає синтаксису того, чого ти хочеш. Якщо термін дії не закінчується, термін дії файлу cookie закінчується в кінці сеансу. Єдиний варіант - вибрати якесь довільно велике значення. Майте на увазі, що деякі веб-переглядачі мають проблеми з датами минулого 2038 року (коли епоха часу Unix перевищує 32-бітну інту).


25
2038-01-19, 03:14:08 UTC, якщо бути точним.
Вільгельм Клопп

Просто для уточнення: це правило, яке працює однаково у кожному браузері? Це означає, що якщо я не встановлю термін дії, файл cookie буде тривати лише до кінця сеансу.
Silver Ringvee

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

67

Ви можете зробити приклад для документів Mozilla :

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

PS

Звичайно, виникне проблема, якщо людство все-таки використовуватиме ваш код у першу хвилину року 10000 :)


89
Ви впевнені, що його п'ятниця?
Девід


5
Не працювало для мене за допомогою npmjs.com/package/universal-cookie . Пішли з рішенням 2038 року . Я написав квиток, щоб повернутися в 2030 році, щоб побачити, чи є виправлення.
Гінріх

15

Усі файли cookie закінчуються відповідно до специфікації cookie. Максимальне значення, яке ви можете встановити

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

Отже, максимальний час життя файлів cookie

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

7
Це число не працювало для мене. Після невеликих спроб та помилок найбільше мені вдалося скористатись 99983090 (закінчується = Пт, 12 вересня 275760 18:10:24 GMT). Все, що вище, повернуло "
Недійсну

Якщо ви передаєте число, як параметр закінчується, jquery-cookie або js-cookie, з цього моменту він вважається таким, що закінчується днями. Якщо ви хочете встановити фіксовану дату, вам слід передати об'єкт «Дата».
Даріо Сейдл

У наведеному вище коді використовується плагін jquery-cookie, який було вилучено на користь js-cookie .
Єнс

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

12

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


1
Це правильна відповідь на встановлення нескінченних файлів cookie. І якщо вам потрібно врахувати, що користувач ніколи не закриває сайт, ви можете ввести додаткову умову для оновлення файлів cookie будь-якими діями або через певний час.
Alex

9

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


2

ВИ ДУЖЕ НЕ МОЖЕТЕ . Немає точного коду, який слід використовувати для встановлення вічного файлу cookie, але старий трюк виконує, наприкладcurrent time + 10 years .

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

Дивіться проблему 2038 року



@GustvandeWal Так так? Я вже це читав. Я навіть включив це посилання у свою відповідь.
rhavendc

1
З вашої відповіді: Для 64-бітових інт років близько 2110 буде безпечним. Це здається підозрілим, як ви очікуєте, що 64-розрядні комп'ютери будуть рахувати вдвічі більше, ніж 32-бітні комп'ютери (1970 -> 2035 -> 2110)
Густ ван де Валь,

@GustvandeWal Вибачте, якщо мої слова звучать підозріло. Можливо, це не найкращий спосіб сказати це англійською мовою. Але ей, я не очікував і не думав про таку ідею, яку ти щойно сказав.
rhavendc

4
Невелика примітка: якби ми використовували 33-бітні процесори, то 2110 рік мав би сенс.
hegez

1

Якщо ви маєте намір читати дані лише з боку клієнта, ви можете використовувати локальне сховище. Видаляється лише тоді, коли очищений кеш браузера.


Або браузер закритий, або комп'ютер закритий
Redwolf Programs

@RedwolfPrograms З тих пір, коли видаляється локальне сховище, коли браузер закривається чи вимикається комп'ютер?
Ігор Єросиміч

@ IgorJerosimić На жаль! Я думаю, я думав, що через помилку на моєму сайті ...
Redwolf Програми

-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.