6

我的配置:

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

现在,我有一个“注销”链接,该链接指向我的应用程序上的 /logout。

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

req.session.custom

注销后仍然保持。然而,

req.session.auth

注销后清除。

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

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

4

2 回答 2

15

如果您想在注销时完全清除用户的会话,您可以req.session.destroy()从您的everyauth.everymodule.handleLogout函数中调用。仅req.session.auth在您调用时被清除req.logout()

于 2012-06-30T12:56:52.907 回答
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
}));
于 2021-03-05T06:05:03.140 回答