Connect-mongo sessions not being deleted automatically
express, mongodb, node.js, session
Solution
You haven't set a `clear_interval` for your sessions .. the connect-mongo default is -1 (or "never"):
`clear_interval` Interval in seconds to clear expired sessions (optional, default: -1). Values <= 0 disable expired session clearing.
Example of removing expired sessions every hour (3600s):
var sessionStore = new MongoStore({
db: 'myappsession',
clear_interval: 3600
});
You should also make sure you have set a `maxAge` on your sessions to they actually expire (eg using 1 day):
app.use(express.session({
secret: "myappsecret",
cookie: { maxAge: 24 * 60 * 60 * 1000 },
store:sessionStore
}));
Problem
I have an application using NodeJS, Express, MongoDB and connect-mongo. My issue is that sessions don’t seem to be automatically deleted from MongoDB when they expire, so the db size grows until the disk is full. The developer of connect-mongo wrote a comment: connect-mongo will ask MongoDB to remove all the sessions that have expired before the current date. But this doesn’t seem to be happening in my case. My configuration is: ``` 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')); }); ``` And I’m currently running the following versions: - node: 0.7.0-pre - connect-mongo: 0.1.7 - express: 2.5.2 - connect: 1.8.5