Node
Tutorial Node: Sesiones y cookies
Node.js: Aprende a gestionar sesiones sin frameworks usando http. Mejora la seguridad con cookies y autenticación en Node.js 23.3.0.
Aprende Node GRATIS y certifícateMecanismo de sesiones en Node.js
Para gestionar la persistencia de información asociada a cada usuario, se puede implementar un mecanismo de sesiones manualmente utilizando el módulo incorporado http. Este enfoque emplea un identificador único (session ID) asignado a cada cliente, que se conserva durante el ciclo de vida de la sesión. Aunque en un entorno real se suele recurrir a bases de datos u otros contenedores externos, aquí se mostrará un ejemplo sencillo que almacena la información en memoria.
Una estrategia frecuente es generar un identificador aleatorio con funciones criptográficas y enviarlo al cliente mediante una cabecera personalizada. En la memoria del servidor se guarda un objeto global, donde la clave será el identificador de sesión y el valor los datos de la sesión. Cada vez que llega una nueva petición, se comprueba si el cliente ya dispone de un session ID y, en caso afirmativo, se recuperan sus datos de la estructura compartida.
Un ejemplo básico podría ser:
import { createServer } from 'http';
import { randomBytes } from 'crypto';
const sessions = {};
createServer((req, res) => {
const cookies = parseCookies(req.headers.cookie || '');
let sessionId = cookies.sessionId;
if (!sessionId || !sessions[sessionId]) {
sessionId = randomBytes(16).toString('hex');
sessions[sessionId] = { data: 'Información asociada' };
res.setHeader('Set-Cookie', `sessionId=${sessionId}; HttpOnly`);
}
// Manipular datos de la sesión
// Por ejemplo: sessions[sessionId].data = "Nuevo valor"
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Sesión gestionada sin frameworks');
}).listen(3000);
function parseCookies(cookieHeader) {
const parseObj = {};
cookieHeader.split(';').forEach(cookie => {
const [key, value] = cookie.split('=');
parseObj[key.trim()] = value;
});
return parseObj;
}
Cada petición gestiona si se debe crear una nueva sesión o reutilizar una existente. Este mecanismo se puede ampliar para manejar datos más complejos o administrar la caducidad de cada sesión, pero es esencial emplear un almacenamiento confiable en sistemas de producción para evitar la pérdida de información crítica.
Manejo de cookies y cabeceras de autenticación
Las cookies permiten enviar información al navegador para que la próxima petición incluya ciertos datos de identificación o preferencias. La cabecera HTTP Set-Cookie
se utiliza para crear o actualizar valores en el cliente, mientras que la cabecera Cookie
representa esos valores al llegar nuevamente al servidor. En Node.js se suelen combinar atributos como HttpOnly
, SameSite
y Secure
para aumentar la protección de los datos.
Un ejemplo de asignación de cookie puede realizarse con la siguiente instrucción dentro de una respuesta del servidor:
res.setHeader('Set-Cookie', 'usuario=abc123; HttpOnly; Path=/; SameSite=Strict');
Cada petición posterior incluirá la cabecera Cookie
con los valores previamente establecidos, lo cual puede revisarse mediante req.headers.cookie
. Para un control detallado, se acostumbra separar y parsear cada par clave-valor, facilitando la lectura y uso de la información asociada a cada cliente.
En cuanto a las cabeceras de autenticación, es frecuente emplear Authorization
con los esquemas Basic o Bearer. Al usar un token Bearer, suele bastar con capturar el valor de la siguiente forma:
const authHeader = req.headers.authorization;
if (authHeader && authHeader.startsWith('Bearer ')) {
const token = authHeader.slice(7);
// Aquí se valida el token y se aplican las medidas necesarias
}
Cuando se usa autenticación Basic, se decodifica la credencial enviada en Base64 para extraer el usuario y la contraseña, aunque suele ser recomendable migrar a un esquema más seguro basado en tokens. En cualquier caso, se debe evitar exponer datos sensibles en cabeceras planas y considerar el cifrado de la conexión con HTTPS como parte de una estrategia integral.
Todas las lecciones de Node
Accede a todas las lecciones de Node y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Node.js
Introducción Y Entorno
Fundamentos Del Entorno Node.js
Introducción Y Entorno
Módulo Http Y Https
Http Y Api Rest
Http Params, Headers Y Body
Http Y Api Rest
Validación De Datos
Http Y Api Rest
Conexión A Bases De Datos Sin Orm
Persistencia
Creación De Consultas Básicas (Crud) Sin Orm
Persistencia
Módulo Fs
Sistema De Archivos
Introducción A La Seguridad
Seguridad
Sesiones Y Cookies
Seguridad
Roles Y Permisos
Seguridad
Testing En Node.js
Testing
Estructura De Carpetas
Arquitectura
Configuración Y Variables De Entorno
Arquitectura
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender el manejo básico de sesiones en Node.js.
- Implementar un sistema de sesiones usando identificadores únicos.
- Aprender a manipular cookies y crear cabeceras de autenticación.
- Entender la importancia de atributos como HttpOnly y SameSite.