Сеансы Connect-mongo автоматически не удаляются

У меня есть приложение, использующее NodeJS, Express, MongoDB и connect-mongo.

Моя проблема заключается в том, что сеансы не кажутся автоматически удаляемыми из MongoDB, когда они истекают, поэтому размер db растет до тех пор, пока диск не будет заполнен.

Разработчик connect-mongo написал комментарий:

connect-mongo попросит MongoDB удалить все сеансы, которые истек до текущей даты.

Но это, похоже, не происходит в моем случае.

Моя конфигурация:

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

И Im в настоящее время работает со следующими версиями:

  • node: 0.7.0-pre
  • connect-mongo: 0.1.7
  • выразить: 2.5.2
  • connect: 1.8.5

Ответ 1

Вы не установили clear_interval для своих сеансов. По умолчанию для подключения-mongo используется значение -1 (или "никогда" ):

clear_interval Интервал в секундах для удаления истекших сеансов (необязательно, по умолчанию: -1). Значения <= 0 отключить очистку сеанса с истекшим сроком действия.

Пример удаления истекших сессий каждый час (3600 секунд):

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

Вы также должны убедиться, что вы установили maxAge на своих сеансах, чтобы они действительно истекали (например, с использованием 1 дня):

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