aimenu

Almacenamiento


Introducción al Almacenamiento en JavaScript

Aunque JavaScript en el navegador no fue inicialmente diseñado para almacenar grandes volúmenes de datos, existen dos mecanismos principales para persistencia en el lado del cliente:

Para facilitar el manejo de datos complejos (por ejemplo, objetos o arrays) en ambos métodos, es común utilizar JSON.


Recordando JSON

Dado que tanto Cookies como LocalStorage almacenan cadenas de texto, JSON es la herramienta ideal para serializar datos complejos.
JSON (JavaScript Object Notation) es un formato de texto ligero para representar estructuras de datos. Los dos métodos fundamentales son:

Ejemplo: Convertir y reconstruir un array

let frutas = ["manzana", "banana", "cereza"];

// Convertir a una cadena de texto JSON
let frutasJSON = JSON.stringify(frutas);
console.log(frutasJSON); // '["manzana","banana","cereza"]'

// Reconstruir el array a partir de la cadena JSON
let frutasRecuperadas = JSON.parse(frutasJSON);
console.log(frutasRecuperadas); // ["manzana", "banana", "cereza"]

Cookies

Para crear o modificar una cookie en JavaScript, se utiliza la propiedad document.cookie, que acepta una cadena con el siguiente formato:

"nombreVariable=valor; expires=fechaDeExpiración; path=/" 

Ejemplo: Crear una cookie

document.cookie = "username=John Smith; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

Funciones de Utilidad para Cookies

Para facilitar la gestión de cookies, es recomendable utilizar funciones helper. A continuación se muestran ejemplos de funciones comunes:

function setCookie(cname, cvalue, exdays) {
  const fecha = new Date();
  fecha.setTime(fecha.getTime() + (exdays * 24 * 60 * 60 * 1000)); // exdays en milisegundos
  const expires = "expires=" + fecha.toUTCString();
  document.cookie = `${cname}=${cvalue}; ${expires}; path=/`;
}

// Ejemplo: Crear una cookie "usuario" que expire en 7 días
setCookie("usuario", "Juan", 7);
function getCookie(cname) {
  const nombre = cname + "=";
  const cookies = document.cookie.split(';');
  for(let i = 0; i < cookies.length; i++) {
    let c = cookies[i].trim();
    if (c.indexOf(nombre) === 0) {
      return c.substring(nombre.length, c.length);
    }
  }
  return "";
}

// Ejemplo: Obtener el valor de la cookie "usuario"
console.log(getCookie("usuario"));
function deleteCookie(cname) {
  // Para eliminar una cookie, se establece su fecha de expiración en el pasado.
  setCookie(cname, "", -1);
}

// Ejemplo: Eliminar la cookie "usuario"
deleteCookie("usuario");

Ejemplo Práctico: Función checkCookie

Un ejemplo común es comprobar si una cookie existe y, en caso contrario, pedir al usuario un dato para establecerla. Por ejemplo:

function checkCookie() {
  let user = getCookie("username");
  if (user !== "") {
    alert("¡Bienvenido de nuevo, " + user + "!");
  } else {
    user = prompt("Por favor, ingresa tu nombre:", "");
    if (user !== "" && user != null) {
      setCookie("username", user, 365);
    }
  }
}

checkCookie();

LocalStorage y SessionStorage

¿Qué es LocalStorage?

LocalStorage es una tecnología de almacenamiento web disponible en navegadores modernos que permite guardar información en el navegador del cliente de manera persistente, incluso después de cerrar la ventana o pestaña. Por lo general, el límite de almacenamiento es de al menos 5 MB, aunque depende del navegador.

¿Qué es SessionStorage?

Similar a LocalStorage, pero la información almacenada en sessionStorage se mantiene solo durante la sesión actual. Se borra al cerrar la ventana o pestaña.

Métodos Clave

Ambos objetos utilizan los mismos métodos básicos:

Ejemplo Práctico con LocalStorage

// Guardar un valor en localStorage
localStorage.setItem("apellido", "García");

// Recuperar el valor almacenado
alert(localStorage.getItem("apellido")); // Mostrará "García"

// Eliminar el valor almacenado
localStorage.removeItem("apellido");

// Comprobar la eliminación
alert(localStorage.getItem("apellido")); // Mostrará null

Uso de JSON con Storage

Para almacenar objetos o arrays, basta con serializarlos a JSON antes de guardarlos y, al recuperarlos, parsear la cadena JSON:

// Objeto a almacenar
let usuario = { nombre: "Carlos", edad: 30 };

// Guardar en localStorage convirtiéndolo a cadena JSON
localStorage.setItem("usuario", JSON.stringify(usuario));

// Recuperar y reconstruir el objeto
let usuarioRecuperado = JSON.parse(localStorage.getItem("usuario"));
console.log(usuarioRecuperado.nombre); // "Carlos"