清除mongodb,expressjs,nodejs中的会话

Raj*_*jat 6 mongodb node.js 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 }));
});
Run Code Online (Sandbox Code Playgroud)

现在,我有一个"注销"链接进入/注销我的应用程序.

AFAIK,express在注销时自动负责清算会话.但是我的配置,我不认为它这样做.例如,附加到会话的自定义变量

req.session.custom
Run Code Online (Sandbox Code Playgroud)

注销后仍然保持.然而,

req.session.auth
Run Code Online (Sandbox Code Playgroud)

注销后清除.

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

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

Joh*_*yHK 14

如果要在注销时完全清除用户的会话,可以req.session.destroy()从您的everyauth.everymodule.handleLogout函数调用.只有req.session.auth在你打电话时才会被清除req.logout().

  • 您的注销是否重定向到登录页面?然后,这将创建一个新会话来替换您在注销期间刚刚销毁的那个会话,并使其看起来没有任何变化. (4认同)
  • `req.session.destroy()` 从您的商店中删除会话对象。 (3认同)