2013-05-30 2 views
1

Моя сессия не очищается в AppFog. Моя установка выглядит следующим образом:Сессии, которые не очищаются при использовании AppFog с использованием mongo-connect

Node.js (с курьерским) MongoDB Connect-Монго для сеанса магазина 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

Окей нашел реальную проблему в отношении этой проблемы. Это связано с моим кешем. Кажется, что сеансы кэшируются, когда я использую maxAge в своей общей папке. После того как я удалил кеш, сеансы очищались, как ожидалось.

Кто-нибудь, как идея о том, как отключить кеш для сеансов, но не для статического контента?

UPDATE

Понял работы с кэшем в настоящее время. Очищая сеансы в обратном вызове res.render и вызывая res.send() и передавая в html, который возвращается из res.render().

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

Благодарим за помощь. Похоже, он работает. Я использую сеанс для флэш-сообщений, поэтому я не могу удалить их, прежде чем я создам представление. Лучше ли использовать удаление для сеансов, а не null? –

+1

Вы можете передать обратный вызов для рендеринга, но тогда вам придется явно вызвать res.send. http://expressjs.com/api.html#res.render – furydevoid

Смежные вопросы