post thumbnail

Node.js y Express: Cookies y Sesiones

Publicado Por: Oscar González, El 18/11/2013


Detalles del Curso:

Dificultad: Novato

Duración: 10 min


En este capitulo hablaré de como Express maneja cookies y sesiones. Vamos a empezar con los cookies.


Cookies

Para hacer uso de la cookies tenemos que hacer uso del cookieParser en app.js.

app.use(express.cookieParser());

Ahora, necesitamos crear un cookie. Esto lo hacemos a través de res.cookie donde "res" es nuestro objeto response que viene como parámetro en una ruta. Lo único que tenemos que especificar es el nombre del cookie y el valor: res.cookie('name', 'oscar')

Esto retorna el mismo objeto response por lo que podemos encadenarle otros llamados. Veamos un ejemplo en una ruta:

app.get('/name/:name', function(req, res) {

  res
  .cookie('name', req.params.name)
  .send('<p>
  Vea el valor del cookie <a href="/name">aquí</a>

</p>');

});

El método cookie de response también puede recibir otro parámetro con unas opciones, como la fecha de expiración de una cookie por ejemplo:

res.cookie('name', 'oscar', { expires: new Date(Date.now() + 900000) } );

En el caso de esta demostración no es necesario asignar ninguno de estos valores. Para mayor información puedes chequear la documentación de Express.

Si navegamos ahora a localhost:3000/name/oscar veremos el mensaje "Vea el valor del cookie aquí" en el explorador. Para asegurarnos que se haya asignado el valor debemos abrir nuestra consola de javascript y escribir:

> document.cookie
 "name=oscar"

Ahora, si hacemos click en el link que colocamos en el mensaje que enviamos, obtendremos que la página no existe. vamos a crearla.

Para esto creamos la ruta:

app.get('/name', function (req, res) {
  res.send(req.cookies.name);
});

Como el valor de la ruta queda asignado, ahora siempre podremos obtenerlo en el objeto request.

Si vamos a localhost:3000/name veremos el valor de nuestra cookie "name".

Ahora si quisiéramos crear una ruta para borrar el valor del cookie "name", podemos llamar al método res.clearCookie('name');


Sesiones

Pasemos ahora a hablar de las sesiones.

Lo primero que tenemos que saber es que las sesiones solo las podemos obtener a través del objeto request.

Antes de empezar a trabajar con sesiones tenemos agregar la siguiente linea a nuestra sección de código de configuración:

app.use(express.session({ secret: 'esto es secreto'}));

Este método recibe como parámetro una opción llamada "secret", esto no tiene que ser ningún valor en especifico, es solo para crear un hash con esta cadena de caracteres.

Entonces ahora tenemos que hacer unos cambios en nuestras rutas para trabajar con sesiones:

app.get('/name/:name', function(req, res) {

  req.session.name = req.params.name;

  res
  .send('<p>
  Vea el valor de esta sesión <a href="/name">aquí</a>

</p>');

});


app.get('/name', function (req, res) {
  res.send(req.session.name);
});

Esto pareciera ser más sencillo que usar cookies, y lo es, pero en realidad es incluso mejor, porque los valores quedan guardados en javascript y pueden ser más que un simple string como lo hacíamos con las cookies, con sesiones podríamos guardar objetos si quisiéramos. Un ejemplo que se me viene a la mente es el del carrito de compras; el usuario agrega artículos a un carrito de compras y aunque deje la página, cuando vuelva a acceder, podemos recuperar los artículos desde la sesión.

Entonces ahora podemos probar nuestra pequeña aplicación, accedemos a localhost:3000/name/pepe y luego a localhost:3000/name y deberíamos obtener el mismo comportamiento que con las cookies.


Conclusión

Estos son los pasos básicos para trabajar con cookies y sesiones en Node.js con Express. Como puedes ver es muy simple y muy util para cuando hacemos aplicaciones más grandes.

Cualquier duda o comentario, como siempre, no dejes de agregarlo en la sección de comentarios más abajo.

Hasta la próxima.


¿Te ha gustado esta publicación?

Compártela:

Por Oscar González

Conoce más sobre este autor aquí


comments powered by Disqus