2012-08-22 9 views
10

Ho un'applicazione che utilizza NodeJS, Express, MongoDB e connect-mongo.Le sessioni Connect-mongo non vengono cancellate automaticamente

Il mio problema è che le sessioni non sembrano essere cancellate automaticamente da MongoDB quando scadono, quindi la dimensione db cresce fino a quando il disco è pieno.

Lo sviluppatore di Connect-mongo wrote a comment:

connect-mongo chiederà MongoDB per rimuovere tutte le sessioni che hanno scaduto prima della data corrente.

Ma questo non sembra accadere nel mio caso.

La mia configurazione è:

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')); 
}); 

E Sono attualmente in esecuzione le seguenti versioni:

  • nodo: 0.7.0-pre
  • collegare-mongo: 0.1 .7
  • express: 2.5.2
  • Connect: 1.8.5

risposta

20

Non hai impostato un clear_interval per le sessioni di .. il predefinito Connect-Mongo è -1 (o "mai"):

clear_interval Intervallo in secondi per cancellare le sessioni scadute (facoltativo, predefinito: -1). Valori < = 0 disabilita la cancellazione sessione scaduta.

Esempio di rimozione di sessioni scadute ogni ora (3600s):

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

Si dovrebbe anche assicurarsi di aver impostato un maxAge sulle sessioni di essi effettivamente scadenza (ad esempio utilizzando 1 giorno):

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

Grazie Stennie, è un grande aiuto. Per quanto riguarda l'impostazione maxAge, dovrebbe essere specificato in secondi o millisecondi? Ad esempio, nuova data (Date.now() + 86400) o nuova data (Date.now() + 86400 * 1000)? –

+0

@KevanStannard: Siamo spiacenti, ho sbagliato l'esempio corretto di MaxAge .. sopra. Hai ragione, dovrebbe essere millisecondo. Sono stato sviato pensando alla data di scadenza. – Stennie

+0

Grazie per il tuo aiuto! –

Problemi correlati