¿Cómo configurar una cookie que nunca caduca en JavaScript?

Podemos configurar una cookie que nunca caduque en JavaScript usando el siguiente enfoque:

Requisitos previos:

  • Conocimiento de nivel intermedio de JavaScript.
  • HTML básico  

Descargo de responsabilidad: todas las cookies caducan según la especificación de cookies . Por lo tanto, no hay un bloque de código que pueda escribir en JavaScript para configurar una cookie que nunca caduque. Es simplemente imposible y es un hecho.

Solución: pero puede configurar una cookie que caduque en JavaScript y elegir un valor muy grande como fecha de caducidad como se especifica a continuación:

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

NOTA: Pero los navegadores tienen un problema con las fechas posteriores a 2038-01-19 04:14:07 ya que el tiempo de época de Unix supera los 32 bits de int. Este problema también se denomina problema del año 2038 (también llamado Y2038, Epochalypse, Y2k38 o Unix Y2K).

Por lo tanto, el valor máximo que puede establecer como fecha de caducidad para una cookie compatible con la mayoría de los navegadores web es:

231 - 1 = 2147483647 ie. 2038-01-19 04:14:07

Sintaxis:

document.cookie = "cookieName= true; expires=Tue, 19 Jan 2038 04:14:07 GMT";

// OR
const cookieName = "something";
const cookieValue = "something";
const daysToExpire = new Date(2147483647 * 1000).toUTCString();
document.cookie = cookieName + '=' + cookieValue + '; expires=' + daysToExpire;

Código: 

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, value 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>

Producción:

Galleta de larga duración

Publicación traducida automáticamente

Artículo escrito por jt9999709701 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *