Node.js

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ícate

Mecanismo 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.

Para seguir leyendo hazte Plus

¿Ya eres Plus? Accede a la app

20 % DE DESCUENTO

Plan mensual

19.00 /mes

15.20 € /mes

Precio normal mensual: 19 €
58 % DE DESCUENTO

Plan anual

10.00 /mes

8.00 € /mes

Ahorras 132 € al año
Precio normal anual: 120 €
Aprende Node GRATIS online

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.

Accede GRATIS a Node y certifícate

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.