2012-08-22 30 views
10

Tengo una aplicación que utiliza NodeJS, Express, MongoDB y connect-mongo.Connect-mongo sesiones no se eliminan automáticamente

Mi problema es que parece que las sesiones no se eliminan automáticamente de MongoDB cuando caducan, por lo que el tamaño de db crece hasta que el disco está lleno.

El desarrollador de conexión-mongo wrote a comment:

Connect-mongo le preguntará MongoDB para eliminar todas las sesiones que tienen expirado antes de la fecha actual.

Pero esto no parece estar sucediendo en mi caso.

Mi configuración es:

var express = require('express'); 
var MongoStore = require('connect-mongo'); 

var sessionStore = new MongoStore({db: 'myappsession'}); 

var app = express.createServer(); 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ secret: "myappsecret", store:sessionStore })); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 
}); 

y actualmente estoy ejecutando los siguientes versiones:

  • nodo: 0.7.0-pre
  • conectar-mongo: 0,1 .7
  • express: 2.5.2
  • Conectar: ​​ 1.8.5

Respuesta

20

no se ha definido un clear_interval para sus sesiones .. el valor por defecto de conexión-mongo es -1 (o "nunca"):

clear_interval Intervalo en segundos para borrar las sesiones caducadas (opcional, predeterminado: -1). Los valores < = 0 inhabilitan la eliminación de sesión vencida.

Ejemplo de eliminación de sesiones caducadas todas las horas (3600):

var sessionStore = new MongoStore({ 
    db: 'myappsession', 
    clear_interval: 3600 
}); 

También debe asegurarse de que tenga una maxAge en sus sesiones para que realmente se vencen (por ejemplo, por medio de 1 día):

app.use(express.session({ 
    secret: "myappsecret", 
    cookie: { maxAge: 24 * 60 * 60 * 1000 }, 
    store:sessionStore 
})); 
+0

Gracias Stennie, eso es de gran ayuda. En cuanto a la configuración de maxAge, ¿debería especificarse en segundos o milisegundos? Por ejemplo, nueva Fecha (Date.now() + 86400) o nueva Fecha (Date.now() + 86400 * 1000)? –

+0

@KevanStannard: Lo siento, fallé el ejemplo corregido de maxAge. Tienes razón, deberían ser milisegundos. Me desvié de mi mente pensando en la fecha de caducidad. – Stennie

+0

¡Gracias por tu ayuda! –

Cuestiones relacionadas