未使用mongo-connect在AppFog上清除会话

时间:2013-05-30 08:40:29

标签: node.js session express appfog

我的会话未在AppFog上清除。我的设置如下:

Node.js(带快递) MongoDB的 connect-mongo用于会话存储 mongoHQ用于托管我的数据库。

我已连接我的本地设置以使用mongoHQ数据库实例,并且我的所有会话都被清除了。但是当从AppFog运行应用程序时,sesssions不会被清除。

我的会话中间件:

 app.use(express.session({
    secret: 'my secret here',

    cookie: { maxAge: new Date(Date.now() + 360000)},
    store: new MongoStore({
        url: connectionEnv.dbConnection
    })
}));

以下是使用和清除会话的示例:

console.log(req.session.errors); // Session has a value as intended
res.render('contact', {
    user: username,
    email: email,
    messages: req.session.messages,
    errors: req.session.errors
});

req.session.messages = null;
req.session.errors = null; // The session is beeing cleared

console.log(req.session.errors); // Session is now null

但是,如果我现在刷新页面会话已经以某种方式获得了它的价值。这仅在从AppFog运行应用程序时发生。

2 个答案:

答案 0 :(得分:2)

Express / Connect会在结束对客户端的响应(See Here)之前保存会话状态。在致电res.render之前进行更改,并使用delete销毁会话变量。

试试这个:

var errors = req.session.errors
var messages = req.session.messages

// Before Render
delete req.session.errors
delete req.session.messages

res.render('contact', {
    user: username,
    email: email,
    messages: errors,
    errors: messages
});

答案 1 :(得分:0)

Okej发现了关于这个问题的真正问题。它与我的缓存有关。当我在公共文件夹上使用maxAge时,似乎会缓存会话。删除缓存后,会话按预期清除。

如何了解如何为会话禁用缓存而不是静态内容?

<强>更新

现在正在使用缓存。通过清除res.render回调中的会话,然后调用res.send()并传入从res.render()返回的html。