Sesiones Express

Cómo usar sesiones para identificar usuarios en todas las solicitudes

De forma predeterminada, las solicitudes Express son secuenciales y ninguna solicitud se puede vincular entre sí. No hay forma de saber si esta solicitud proviene de un cliente que ya realizó una solicitud anteriormente.

Los usuarios no pueden ser identificados a menos que se utilice algún tipo de mecanismo que lo haga posible.

Eso es lo que son las sesiones.

Cuando se implemente, a cada usuario de su API o sitio web se le asignará una sesión única, y esto le permitirá almacenar el estado del usuario.

Usaremos elexpress-sessionmódulo, que es mantenido por el equipo Express.

Puedes instalarlo usando

npm install express-session

y una vez que haya terminado, puede crear una instancia en su aplicación con

const session = require('express-session')

Este es un middleware, por lo queInstalar en pcen Express usando

const express = require('express')
const session = require('express-session')

const app = express() app.use(session({ ‘secret’: ‘343ji43j4n3jn4jk3n’ }))

Una vez hecho esto, todas las solicitudes a las rutas de la aplicación ahora usan sesiones.

secretes el único parámetro obligatorio, pero hay muchos más que puede utilizar. Debe ser una cadena única aleatoria para su aplicación.

La sesión se adjunta a la solicitud, por lo que puede acceder a ella utilizandoreq.sessionaquí:

app.get('/', (req, res, next) => {
  // req.session
}

Este objeto se puede utilizar para obtener datos de la sesión y también para configurar datos:

req.session.name = 'Flavio'
console.log(req.session.name) // 'Flavio'

Estos datos se serializan comoJSONcuando se almacena, por lo que es seguro utilizar objetos anidados.

Puede utilizar sesiones para comunicar datos a middleware que se ejecutan más tarde, o para recuperarlos más tarde, en solicitudes posteriores.

¿Dónde se almacenan los datos de la sesión? Depende de cómo configure elexpress-sessionmódulo.

Puede almacenar datos de sesión en

  • memoria, no destinado a la producción
  • abase de datoscomo MySQL o Mongo
  • aMemoria cachécomo Redis o Memcached

Hay una gran lista de terceros paquetes que implementan una amplia variedad de diferentes almacenes de almacenamiento en caché compatibles enhttps://github.com/expressjs/session

Todas las soluciones almacenan la identificación de la sesión en una cookie y mantienen los datos del lado del servidor. El cliente recibirá la identificación de la sesión en una cookie y la enviará junto con cada solicitud HTTP.

Haremos referencia a ese lado del servidor para asociar la identificación de la sesión con los datos almacenados localmente.

La memoria es la predeterminada, no requiere una configuración especial de su parte, es la cosa más simple pero está pensada solo para propósitos de desarrollo.

La mejor opción es un caché de memoria como Redis, para lo cual necesita configurar su propia infraestructura.

Otro paquete popular para administrar sesiones en Express escookie-session, que tiene una gran diferencia: almacena datos del lado del cliente en la cookie. No recomiendo hacer eso porque almacenar datos en cookies significa que se almacenan en el lado del cliente y se envían de un lado a otro en cada una de las solicitudes realizadas por el usuario. También tiene un tamaño limitado, ya que solo puede almacenar 4 kilobytes de datos. Las cookies también deben estar protegidas, pero de forma predeterminada no lo están, ya que las cookies seguras son posibles en los sitios HTTPS y debe configurarlas si tiene proxies.

Descarga mi gratisManual de Express.js


Más tutoriales rápidos: