清除mongodb,expressjs,nodejs中的会话

时间:2012-06-30 12:13:32

标签: node.js mongodb express everyauth

我的配置:

app.configure(function(){
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.cookieParser());
    app.use(express.session({
        secret: 'MY SECRET',
        store: new MongoStore({
            db: 'MY SESSION DB',
            host: 'localhost',
            port:88888
        })
    }));
    app.use(everyauth.middleware());
    app.use(express.methodOverride());

    app.use(app.router);
});

app.configure('dev', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
    appPort = config.port; //Setting PORT to 8888 in dev mode.
    app.use('/public', express.static(__dirname + '/public'));
});

app.configure('production', function(){
    app.use(express.errorHandler());
    appPort = config.port;
    //Set cache-header-expires to 1 day
    var oneDay = 86400000;
    //app.use('/public', express.static(__dirname + '/public'));
    app.use('/public',express.static(__dirname + '/public', { maxAge: oneDay }));
});

现在,我有一个'退出'链接进入/注销我的应用程序。

AFAIK,快递自动负责注销时的清算会话。但是我的配置,我不认为它这样做。例如,附加到会话

的自定义变量
req.session.custom
注销后仍然保持

状态。然而,

req.session.auth
注销后

清除。

MongoDb商店中的会话对象数量只会随着时间的推移而递增。我也在使用 everyauth

我错过了什么或做错了什么?

2 个答案:

答案 0 :(得分:14)

如果您要在注销时完全清除用户的会话,可以从req.session.destroy()功能调用everyauth.everymodule.handleLogout。致电req.session.auth时,仅清除req.logout()

答案 1 :(得分:2)

<块引用>

为什么要在 mongo 商店中创建一个新会话。有什么办法吗? 当我被重定向到再次登录时阻止它。 – 孤独者 2015 年 6 月 7 日 5:43

如果会话不包含任何数据,则有一个 saveUninitialized 选项可防止保存会话。

app.use(session({
    secret: 'secret123',
    store: new MongoStore({
        mongooseConnection: mongoose.connection,
        ttl: 60 * 30 // half hour
    }),
    saveUninitialized: false
}));