Cookie de solo sesión para Express.js

http://www.javascriptkit.com/javatutors/cookie.shtml

Las cookies de solo sesión, por otro lado, almacenan información en la memoria del navegador y están disponibles durante la sesión del navegador. En otras palabras, los datos almacenados dentro de una cookie de sesión están disponibles desde el momento del almacenamiento hasta que se cierra el navegador. Pasar de una página a otra durante este tiempo no borra los datos.

¿Cómo puedo lograr esto usando Express.js ?

En primer lugar, ese sitio web es un lugar horrible para ir.

Ahora a la pregunta.

Lo que en realidad son las sesiones:

  • Los datos se almacenan en el lado del servidor.
  • Se emite una cookie que contiene una identificación.
  • Esta identificación se envía al servidor cada vez que se solicita, debido a que el navegador envía las cookies.
  • Ahora el servidor puede volver a asociar el ID en la cookie, comúnmente llamada Session ID o SID corto, con los datos de sesión almacenados en el servidor.

Express.js tiene soporte para sesiones incorporadas .

Lo que muestra el ejemplo:

  • Configuración del middleware Express.js
  • Uso de una tienda de terceros para guardar los datos de la sesión, en este caso Redis (que IMO es una exageración para su problema atm)

La instalación de Redis requiere bastante trabajo, pero también es posible usar la memoria incorporada de Express.js:

 var express = require('express'); var app = express.createServer(); var MemoryStore = require('connect/middleware/session/memory'); app.use(express.bodyDecoder()); app.use(express.cookieDecoder()); app.use(express.session({ store: new MemoryStore({ reapInterval: 60000 * 10 }) })); app.get('/', function(req, res){ req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1; res.send('You have visited this page ' + req.session.visitCount + ' times'); }); app.listen(4000); 

Esto simplemente hará un seguimiento de cuántas veces visitó la página, cerró su navegador y volvió a abrir. Los condes seguirán ahí.

Puede encontrar más información sobre las opciones de MemoryStore , como la duración máxima de una sesión, etc. aquí .

Lo siguiente es lo que quería (más o menos). Cuando cierro el navegador la información se va.

 var express = require('express'); var app = express.createServer(); var MemoryStore = require('connect/middleware/session/memory'); app.use(express.bodyDecoder()); app.use(express.cookieDecoder()); app.get('/remember', function(req, res) { res.cookie('rememberme', 'yes', { expires: new Date() - 1, httpOnly: true }); }); app.get('/', function(req, res){ res.send('remember: ' + req.cookies.rememberme); }); app.listen(4000, '127.0.0.1'); 
 app.use(express.session({cookie: { path: '/', httpOnly: true, maxAge: null }, secret:'eeuqram'})); 

Lo anterior funciona en IE8, Firefox y Chrome. La pieza importante es maxAge: null

 app.get('/remember', function(req, res) { res.cookie('rememberme', 'yes', { expires: 0, httpOnly: true }); }); 

Esto establecerá la cookie de sesión. En el cierre del navegador se borrará!

A continuación se muestra el código actualizado para la respuesta de Alfred (sesión con Express.js).

  var express = require('express'); var app = express.createServer(); var MemoryStore = require('/home/node/node_modules/connect/lib/middleware/session/memory'); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ key: 'some-key', secret: 'some-We1rD sEEEEEcret!', store: new MemoryStore({ reapInterval: 60000 * 10 }) })); app.get('/', function(req, res) { req.session.visitCount = req.session.visitCount ? req.session.visitCount + 1 : 1; res.send('You have visited this page ' + req.session.visitCount + ' times'); }); app.listen(4000);