Как настроить файл cookie с неограниченным сроком действия в JavaScript?
Мы можем настроить 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 > |
Выход: