2013-05-30 53 views
1

我的會話未在AppFog上清除。我的設置如下:使用mongo-connect在AppFog上未清除會話

的Node.js(含快遞) MongoDB的 連接 - 蒙戈的會話存儲 mongoHQ主辦我的分貝。

我已經連接了我的本地設置,使用mongoHQ db實例,所有會話都被清除了很多。但是,當從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

Okej找到有關這個問題的真正的問題。它與我的緩存有關。似乎會話正在被緩存,當我在我的公用文件夾上使用maxAge時。在我刪除緩存後,會話按預期被清除。

任何人如何關於如何禁用緩存的會議,但不是靜態內容的想法?

UPDATE

得到它具有高速緩存現在的工作。通過清除res.render回調中的會話並調用res.send()並傳入從res.render()返回的html。

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

感謝您的幫助。雖然它工作。我正在使用會話處理Flash消息,所以在呈現視圖之前我無法刪除它們。使用會話刪除而不是null會更好嗎? –

+1

你可以傳遞一個回調來渲染,但是你必須明確地調用res.send。 http://expressjs.com/api.html#res.render – furydevoid