Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Cookies
  • Sesiones
  • Almacenando la sesión en el navegador
  • Almacenando la sesión en el servidor
  1. Express.js

Cookies y sesión

PreviousFormulariosNextExpress.js II

Last updated 2 years ago

HTTP es un protocolo sin estado. Cada petición es completamente independiente de otra y no hay forma de compartir información entre las peticiones.

Las cookies nos permiten almacenar información en el navegador del usuario. Piensa en las cookies como un objeto de JavaScript.

Una sesión Web es el tiempo que dura un visitante en nuestra aplicación antes de cerrar la pestaña, navegar a otra página, o estar inactivo por cierto tiempo.

Cookies

Para escribir una cookie utiliza el método res.cookie:

res.cookie('name', 'pedro', { domain: '.example.com', path: '/admin', secure: true });
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });

Para leer las cookies necesitas configurar un middleware llamado .

El primer paso es instalarlo con npm o Yarn:

$ npm install --save cookie-parser

El siguiente paso es configurar el middleware:

var express = require('express');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cookieParser());

Con este middleware puedes utilizar el método req.cookies y req.signedCookies (para leer cookies cifradas).

Sesiones

Una sesión inicia cuando el visitante ingresa por primera vez a un sitio o aplicación Web, o después de que ese mismo visitante ha finalizado una sesión previa.

Generalmente se define que la sesión termina después de 30 minutos de inactividad del visitante, pero dependiendo del sistema que utilicemos para almacenar la información de la sesión, es posible dejar abierta la sesión días o meses.

El objetivo de definir este concepto de sesión es poder almacenar información que sobrevive las peticiones HTTP de un visitante.

La sesión involucra una cookie con una fecha de expiración, generalmente de 30 minutos.

Cada vez que el visitante hace una petición HTTP la cookie se actualiza para extender la sesión.

Cuando han pasado más de 30 minutos de inactividad la cookie expira y la próxima vez que el visitante ingrese se va a crear una nueva sesión.

La información de la sesión es un objeto de JavaScript que se puede almacenar en el cliente (dentro de una cookie) o en el servidor (en una base de datos o la memoria).

Almacenando la sesión en el navegador

El primer paso es instalarlo con npm o Yarn:

$ npm install cookie-session

El segundo paso es configurarlo de la siguiente forma:

var express = require('express');
var cookieSession = require('cookie-session')

app.use(cookieSession({
  secret: /* una cadena de texto aleatoria */,

  // Cookie Options
  maxAge: 24 * 60 * 60 * 1000 // 24 hours
}))

...

Ahora puedes acceder a la sesión del usuario que hizo la petición con req.session. Por ejemplo:

app.get('/', (req, res, next) => {
  req.session.views = (req.session.views || 0) + 1

  // Write response
  res.send(req.session.views + ' views');
});

Almacenando la sesión en el servidor

Aunque almacenar las sesiones en una cookies es una buena solución, una limitación es que una cookie no puede ocupar más de 4KB de memoria.

Otra opción es almacenar la información de las sesiones en el servidor y guardar en la cookie un identificador para localizar la información de esa sesión en el servidor.

Para almacenar la sesión de cada usuario en una cookie debes utilizar el middleware .

El middleware que se utiliza para almacenar la sesión en el servidor es , que permite almacenar las sesiones en diferentes bases de datos como MongoDB, Redis, etc.

Vamos a omitir la explicación de este middleware en este capítulo porque en la mayoría de los casos es suficiente, pero puedes consultar si deseas utilizar esta opción.

cookie-parser
cookie-session
express-session
cookie-session
la documentación