Connect-mongo sessions not being deleted automatically
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}));
I don't know from where the clear_interval
options was taken but I'm looking at the code of the latest version:
class MongoStore extends Store { constructor(options) { options = options || {} /* Fallback */ if (options.fallbackMemory && MemoryStore) { return new MemoryStore() } super(options) /* Options */ this.ttl = options.ttl || 1209600 // 14 days this.collectionName = options.collection || 'sessions' this.autoRemove = options.autoRemove || 'native' this.autoRemoveInterval = options.autoRemoveInterval || 10 this.transformFunctions = computeTransformFunctions(options, true) // ...setAutoRemoveAsync() { const removeQuery = {expires: {$lt: new Date()}} switch (this.autoRemove) { case 'native': return this.collection.createIndex({expires: 1}, {expireAfterSeconds: 0}) case 'interval': this.timer = setInterval(() => this.collection.remove(removeQuery, {w: 0}), this.autoRemoveInterval * 1000 * 60) this.timer.unref() return Promise.resolve() default: return Promise.resolve() }}
So the correct way to set auto remove based on that code seems to be:
const store = new MongoStore({ url: "put db connection string here ...", autoRemove: 'interval', autoRemoveInterval: 60 * 24 // In minutes. Default})
I dont see any trace of a clear_interval
option, so it seems to me the suggested solution would have no effect ...