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:
Publicación traducida automáticamente
Artículo escrito por jt9999709701 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA