Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Sesión JS: Desarrollo web

Sesión es una abstracción creada para facilitar el trabajo con usuarios individuales. Se utiliza para identificar a los usuarios y permite distinguir uno de otro. Por ejemplo, la autenticación en los sitios web se construye sobre el mecanismo de sesión. En esta lección, discutiremos las sesiones en el contexto de JavaScript.

Cómo funcionan las sesiones

La sesión utiliza cookies para su trabajo. Para cada usuario se crea su propia cookie con un identificador especial que es difícil de replicar. Esto ocurre durante el primer acceso a la sesión. La cookie no se utiliza más, todos los datos se graban en la memoria de la aplicación principal:

Cookie: JSESSIONID=node01lywaspcyuggy15sok9tw6q9eh0.node0

Para trabajar con sesiones en Fastify necesitas conectar el paquete:

npm i @fastify/session
import session from '@fastify/session';
import fastifyCookie from '@fastify/cookie';
import fs from 'fs';
import path from 'path';

await app.register(fastifyCookie);
await app.register(session, {
  secret: 'a secret with minimum length of 32 characters',
  cookie: { secure: false },
});

Cuando conectas es necesario indicar la clave secreta de 32 caracteres.

El principio de trabajar con información en la sesión es muy similar a cómo trabaja con las cookies. Podemos agregar datos a la sesión y leerlos:

app.get('/increment', (req, res) => {
  req.session.counter = req.session.counter || 0;
  req.session.counter += 1;
});

Los datos agregados se almacenan en la sesión hasta que ocurre uno de los siguientes eventos:

  • Se elimina la cookie.
  • Expira el tiempo de vida de la cookie.
  • Los datos de la sesión se eliminan en el back-end.

Cómo utilizar sesiones

Implementaremos un ejemplo simplificado de autenticación en el sitio.

La autenticación es un procedimiento de verificación de autenticidad, por ejemplo:

  • Verificación de la autenticidad del usuario al comparar la contraseña ingresada con la almacenada en la base de datos de usuarios.
  • Confirmación de la autenticidad de un correo electrónico mediante la verificación de la firma digital utilizando la clave pública del remitente.
  • Verificación de la suma de control de un archivo para asegurar que coincida con la suma declarada por el autor del archivo.

❗ La autenticación no debe confundirse con la autorización (procedimiento para proporcionar derechos específicos a un sujeto) e identificación (procedimiento para reconocer a un sujeto por su identificador).

Analizaremos un ejemplo:

import encrypt from './encrypt.js;

app.post('/session', (req, res) => {
  // ...
  if (user.passwordDigest === encrypt(password)) {
    req.session.userId = user.id;
    // ...
  }
  // ...
});

Si las contraseñas coinciden, se establece el identificador del usuario en la sesión bajo una llave que luego se utilizará para verificar si el usuario está autenticado.

Toma en cuenta que en el ejemplo de arriba no se utiliza la contraseña en sí, sino su versión cifrada. Desde una perspectiva de seguridad, no se deben almacenar contraseñas en texto claro bajo ninguna circunstancia. Por lo tanto, cuando se crea un usuario, la contraseña se cifra de manera especial, y este cifrado es lo que se almacena. Durante el procedimiento de autenticación, la contraseña ingresada por el usuario se cifra de la misma manera que durante el registro, luego se comparan los hashes.

// encrypt.js
import crypto from 'crypto';

export default (text) => {
  const hash = crypto.createHmac('sha512', 'salt');
  hash.update(text);
  return hash.digest('hex');
};

Trabajo independiente

Realiza todos los pasos del tutorial en tu computadora.

  1. Agrega autenticación a la aplicación.
  2. Haz un manejador para mostrar la forma de inicio de sesión y para el proceso de inicio de sesión en sí, haz una plantilla. No necesitas verificar la contraseña.
  3. Agrega un enlace a la página de inicio de sesión en la página principal.
  4. Ejecuta la aplicación y asegúrate de que todo funcione.
  5. Abre las herramientas de desarrollador en tu navegador, verifica qué cookies se están configurando.
  6. Encuentra la cookie JSESSIONID.
  7. Intenta borrarla.
  8. Sube los cambios a GitHub.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY