我的会话未在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运行应用程序时发生。
答案 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。