2012-08-22 10 views
10

Ich habe eine Anwendung mit NodeJS, Express, MongoDB und Connect-Mongo.Connect-Mongo-Sitzungen werden nicht automatisch gelöscht

Mein Problem ist, dass Sitzungen nicht automatisch aus MongoDB gelöscht werden, wenn sie ablaufen, so dass die Datenbankgröße wächst, bis die Festplatte voll ist.

Der Entwickler von connect-Mongo wrote a comment:

connect-Mongo wird MongoDB bitten alle Sitzungen zu entfernen, die vor dem aktuellen Datum abgelaufen haben.

Aber das scheint in meinem Fall nicht zu passieren.

Meine Konfiguration ist:

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

Und ich laufe derzeit die folgenden Versionen:

  • Knoten: 0.7.0-pre
  • connect-Mongo: 0,1 .7
  • express: 2.5.2
  • verbinden: 1.8.5

Antwort

20

Sie haben keine clear_interval für Ihre Sitzungen festgelegt .. die connect-Mongo Standard ist -1 (oder "nie"):

clear_interval Intervall in Sekunden, um abgelaufene Sitzungen zu löschen (optional, Standard: -1). Werte < = 0 Deaktivierung der abgelaufenen Sitzung deaktivieren.

Beispiel von abgelaufenen Sitzungen jede Stunde entfernt (3600s):

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

Sie sollten auch sicherstellen, dass Sie eine maxAge auf Ihre Sitzungen eingestellt haben, dass sie ablaufen tatsächlich (zB 1 Tag verwendet wird):

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

Danke Stennie, das ist eine große Hilfe. In Bezug auf die maxAge-Einstellung, sollte diese in Sekunden oder Millisekunden angegeben werden? Zum Beispiel neues Datum (Date.now() + 86400) oder neues Date (Date.now() + 86400 * 1000)? –

+0

@KevanStannard: Sorry, verpatzt das MaxAge .. Beispiel oben korrigiert. Du hast recht, es sollte Millisekunden sein. Ich wurde abgelenkt und dachte über das Verfallsdatum nach. – Stennie

+0

Danke für Ihre Hilfe! –

Verwandte Themen