2010-12-06 25 views
22

http://www.javascriptkit.com/javatutors/cookie.shtmlSesión de sólo cookies para Express.js

de sesión sólo las cookies, por otro lado , almacena la información en la memoria navegador, y está disponible para la duración de la sesión del navegador. En otras palabras, los datos almacenados dentro de una cookie de sesión están disponibles desde el tiempo de almacenamiento hasta que el navegador está cerrado. Pasar de página a página durante este tiempo no borra los datos .

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

+0

¿Sería más correcto decir "de una página a otra en el mismo dominio"? – grantwparks

+0

http://stackoverflow.com/questions/8959233/is-there-a-cookies-based-session-store-for-nodejs-connect-express – abernier

Respuesta

10

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

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'); 
+0

También debe tener algún tipo de validación del lado del servidor! – Alfred

+0

Para la validación del lado del servidor ¡puedo simplemente agregar la instancia de req como el ejemplo de arriba de Ivo! – Alfred

66

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

Ahora a la pregunta.

Lo que en realidad son sesiones:

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

Express.js has support for sessions built in.

Lo que el ejemplo muestra:

  • Configurar el middleware Express.js
  • Usando una tienda de terceros para guardar los datos de la sesión, en este caso Redis (que la OMI es un exceso para su problema atm)

Instalación Redis requiere un poco de trabajo, pero también es posible utilizar Express.js incorporado de almacenamiento de memoria:

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 conteos todavía estarán allí.

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

+0

Una gran cantidad de sitios tienen sólo las cookies de sesión. Incluso gmail? La casilla de verificación 'permanecer firmado' es sesión solamente? Porque quiero que el usuario cierre sesión cuando el navegador se haya cerrado. ¿Porque se puede acceder en la PC compartida y las personas pueden olvidarse de presionar el botón de cerrar sesión? Me gustaría crear una casilla de verificación "permanecer conectado". así que tenga ambos tipos de sesiones. es posible? Muchas gracias. – Alfred

+1

P.S: el fragmento no es única sesión de galleta, porque cuando se cierra cooke se recordará recuento lugar el establecimiento de conteo a cero de nuevo. Pero creo que sé cómo resolver este problema. – Alfred

+0

@Ivo, la pregunta era sobre la sesión única galleta! –

2

A continuación se muestra el código actualizado para Alfred's answer (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); 
2
app.get('/remember', function(req, res) { 
    res.cookie('rememberme', 'yes', { expires: 0, httpOnly: true }); 
}); 

Esto establecerá cookie de sesión. ¡En el navegador cercano se borrará!

7
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

+0

supongo que se podría crear una nueva pregunta (en su lugar)? – Alfred

+0

@Alfred, http://stackoverflow.com/questions/8842389/nodejs-express-session-management-cookie-to-be-session-cookie –

+0

expira: 0 podría funcionar también - no lo ha intentado –

Cuestiones relacionadas