【问题标题】:Clearing sessions in mongodb, expressjs, nodejs清除 mongodb、expressjs、nodejs 中的会话
【发布时间】:2012-07-01 16:55:47
【问题描述】:

我的配置:

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

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

【问题讨论】:

    标签: node.js mongodb express everyauth


    【解决方案1】:

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

    【讨论】:

    • 如何在注销时删除 Mongo 会话存储中的对象?
    • req.session.destroy() 从您的商店中删除会话对象。
    • 我不认为 req.session.destroy() 正在清除它。在注销之前和之后,我测试时商店的 count() 都是 1。有什么线索吗?
    • 您的注销是否重定向到登录页面?然后,这将创建一个新会话来替换您在注销期间刚刚销毁的会话,并使其看起来没有任何变化。
    • 你是对的。它创造了一个新的。我检查会话ID。感谢您指出这一点。
    【解决方案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
    }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-03
      • 2017-11-19
      • 2014-01-12
      • 2015-02-20
      • 1970-01-01
      • 2015-06-18
      • 2014-02-20
      相关资源
      最近更新 更多