1

AppFog 上没有清除我的会话。我的设置如下:

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

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

我的会话中间件:

 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 运行应用程序时。

4

2 回答 2

2

Express/Connect 在结束对客户端的响应之前保存会话状态(请参阅此处)。在调用之前进行更改,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
});
于 2013-05-30T16:02:52.063 回答
0

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

任何人对如何禁用会话缓存而不是静态内容的想法有什么想法?

更新

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

于 2013-06-01T09:27:57.700 回答