Как настроить файл cookie с неограниченным сроком действия в JavaScript?

Опубликовано: 7 Августа, 2021

Мы можем настроить cookie, срок действия которого никогда не истекает в JavaScript, используя следующий подход:

Предпосылки:

  • Знание JavaScript на среднем уровне
  • Базовый HTML

Отказ от ответственности: срок действия всех файлов cookie истекает в соответствии со спецификацией файлов cookie. Итак, нет блока кода, который вы можете написать на JavaScript, чтобы настроить cookie, срок действия которого никогда не истекает. Это просто невозможно и факт.

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

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

ПРИМЕЧАНИЕ. Но у браузеров есть проблема с датами после 2038-01-19 04:14:07, поскольку время эпохи Unix превышает 32-битное int. Эта проблема также называется проблемой 2038 года. (также называемый Y2038, Epochalypse, Y2k38 или Unix Y2K).

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

 2 31 - 1 = 2147483647 т.е. 2038-01-19 04:14:07 

Синтаксис:

 document.cookie = "cookieName = true; expires = Вт, 19 января 2038 г., 04:14:07 GMT";

// ИЛИ ЖЕ
const cookieName = "что-то";
const cookieValue = "что-то";
const daysToExpire = новая дата (2147483647 * 1000) .toUTCString ();
document.cookie = cookieName + '=' + cookieValue + '; expires = '+ daysToExpire;

Код:

HTML




<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< script type = "text/javascript" >
const createCookieWithY2K38 = (cookieName, cookieValue) => {
// Expiry date conversion into UTC standard string
const daysToExpire = new Date(2147483647 * 1000).toUTCString();
// Setting up the cookie name, vakue with the expiry date
document.cookie =
cookieName + '=' + cookieValue + '; expires=' + daysToExpire;
alert('Welcome ' + cookieValue);
}
const extractUserNameFromCookie = (cookieName) => {
var userName = cookieName + '=';
// Splitting cookie
var allCookieArray = document.cookie.split(';');
for (var i = 0; i < allCookieArray.length ; i++) {
// Extracting userName and returning the same
var temp = allCookieArray [i].trim();
if (temp.indexOf(userName) == 0)
return temp.substring(userName.length, temp.length);
}
// Else return empty string
return '';
}
const readCookieAndGreetUser = () => {
var userName = extractUserNameFromCookie('testCookie');
if (userName != '') {
// If user is visiting the page again
// "user" variable will not be a empty string
// returned by the accessCookie() function
// and will greet the user
alert('Welcome ' + userName);
}
else {
userName = prompt('Please enter your name');
if (userName != '' && userName != null) {
createCookieWithY2K38('testCookie', userName);
}
}
}
</ script >
</ head >
< body onload = "readCookieAndGreetUser()" ></ body >
</ html >

Выход:

Долговечные файлы cookie