La gestión de cookies en JavaScript ha sido tradicionalmente algo compleja, ya que requiere utilizar la propiedad document.cookie
y manejar manualmente cadenas con formato específico para leer, escribir y eliminar cookies. Para simplificar esta tarea, surgieron bibliotecas como js-cookie
. js-cookie
es una librería ligera y sencilla que proporciona una interfaz clara para trabajar con cookies en el entorno del navegador.
js-cookie
?
js-cookie
es una biblioteca de JavaScript que facilita la creación, lectura y eliminación de cookies. Proporciona una API intuitiva que te permite manejar cookies de manera mucho más sencilla que utilizando document.cookie
directamente. Entre sus principales ventajas se encuentran:
js-cookie
Antes de poder utilizar js-cookie
, es necesario instalarla en tu proyecto. Hay varias formas de hacerlo:
1. Mediante un CDN (recomendado para proyectos pequeños):
<script src="https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js"></script>
2. Con NPM (para proyectos basados en Node.js):
npm install js-cookie
3. Con Yarn:
yarn add js-cookie
Una vez que has incluido la biblioteca en tu proyecto, puedes comenzar a usarla con la variable global Cookies
(si se ha cargado a través de un CDN) o importarla como un módulo ES6:
import Cookies from 'js-cookie';
js-cookie
La sintaxis básica para crear una cookie es la siguiente:
Cookies.set('nombre_cookie', 'valor_cookie');
Esto creará una cookie con el nombre nombre_cookie
y el valor valor_cookie
que estará disponible en el sitio. Por defecto, las cookies creadas con js-cookie
se eliminan al cerrar el navegador (sesión).
Puedes pasar un tercer parámetro a Cookies.set
para configurar opciones como la fecha de expiración, el dominio y la ruta:
Cookies.set('usuario', 'Juan Perez', { expires: 7, path: '/' });
En este caso, se creará una cookie con nombre usuario
y valor Juan Perez
que:
expires: 7
).
path: '/'
).
Para leer el valor de una cookie, simplemente usa el método Cookies.get
pasando el nombre de la cookie:
const usuario = Cookies.get('usuario');
console.log(usuario); // Imprime: Juan Perez
Si la cookie no existe, devolverá undefined
.
Para obtener todas las cookies almacenadas, usa Cookies.get()
sin argumentos:
const todasLasCookies = Cookies.get();
console.log(todasLasCookies);
// Ejemplo de salida: { usuario: 'Juan Perez', sesion_id: 'abc123' }
Eliminar una cookie es tan sencillo como usar el método Cookies.remove
pasando el nombre de la cookie:
Cookies.remove('usuario');
Si la cookie se creó con opciones como path
o domain
, deberás especificar esas mismas opciones al eliminarla:
Cookies.remove('usuario', { path: '/' });
También es posible almacenar valores más complejos, como objetos, codificando sus valores como cadenas. Por ejemplo:
const preferencias = { tema: 'oscuro', idioma: 'es' };
Cookies.set('preferencias', JSON.stringify(preferencias), { expires: 30 });
Para recuperar y usar esos valores:
const preferenciasGuardadas = JSON.parse(Cookies.get('preferencias'));
console.log(preferenciasGuardadas.tema); // Imprime: oscuro
js-cookie
Por defecto, las cookies son válidas solo en la ruta actual (/
) y el dominio exacto desde el que se crean. Si quieres que la cookie sea accesible desde otras rutas o subdominios, puedes configurar las opciones domain
y path
:
Cookies.set('global_cookie', 'valor', { domain: 'misitio.com', path: '/' });
secure
El atributo secure
garantiza que la cookie solo se envíe a través de conexiones HTTPS:
Cookies.set('secure_cookie', 'valor_seguro', { secure: true });
Esto es especialmente útil cuando trabajas con información confidencial que debe ser protegida.
Si necesitas especificar una fecha exacta para la expiración de la cookie, puedes pasar un objeto Date
en lugar de un número de días:
const fechaExpiracion = new Date(2024, 9, 30); // 30 de octubre de 2024
Cookies.set('expiracion_exacta', 'valor', { expires: fechaExpiracion });
sameSite
)
El atributo sameSite
se utiliza para especificar cuándo las cookies se envían con solicitudes entre sitios. Es una medida de seguridad importante para prevenir ataques de falsificación de solicitudes entre sitios (CSRF). Los valores posibles son:
strict
: La cookie solo se envía si la solicitud proviene del mismo sitio.
lax
: La cookie se envía con la mayoría de solicitudes de navegación, pero no con solicitudes intersitios (por ejemplo, formularios POST).
none
: La cookie se envía con todas las solicitudes, pero requiere el atributo secure
.
Cookies.set('sensible_cookie', 'valor', { sameSite: 'strict' });
A continuación, te muestro algunos ejemplos prácticos del uso de js-cookie
en aplicaciones reales:
Si un sitio web es multilingüe, puedes usar cookies para recordar la preferencia de idioma de los usuarios:
// Establecer la preferencia de idioma
Cookies.set('idioma', 'es', { expires: 365 });
// Leer la preferencia al cargar la página
const idiomaUsuario = Cookies.get('idioma') || 'en';
Puedes utilizar js-cookie
para almacenar un identificador de sesión en lugar de usar localStorage
:
Cookies.set('sesion_id', '123456789', { expires: 1, secure: true, sameSite: 'strict' });
Es común que los sitios web pidan a los usuarios que acepten el uso de cookies. Puedes gestionar este banner usando js-cookie
para almacenar su consentimiento:
// Almacenar el consentimiento del usuario
Cookies.set('consentimiento_cookies', 'aceptado', { expires: 365 });
// Comprobar si el usuario ha aceptado
if (Cookies.get('consentimiento_cookies') !== 'aceptado') {
mostrarBannerDeCookies();
}
js-cookie
simplifica considerablemente el manejo de cookies en JavaScript, eliminando la necesidad de lidiar con la complejidad de document.cookie
. Con su sintaxis clara y opciones avanzadas, es una herramienta imprescindible para desarrolladores que buscan gestionar las cookies de manera eficiente y segura.
Espero que esta guía te haya sido útil y que puedas aplicar estas técnicas en tus proyectos para manejar cookies de manera más profesional.
Jorge García
Fullstack developer