Node.js и экспресс-обработка сеанса - проблема с кнопкой «Назад» - PullRequest
16 голосов
/ 23 мая 2011

В моем приложении Express есть запрещенная область / dashboard.Я использую очень маленькую функцию для ограничения доступа:

app.get('/dashboard', loadUser, function(req, res){
  res.render('dashboard', {
    username: req.session.username
  });
});

function loadUser(req, res, next){
  if (req.session.auth) {
    next();
  } else {
    res.redirect('/login');
  }
};

Проблема в том, что когда я выхожу из системы, вызывая ...

app.get('/logout', function(req, res){
  if (req.session) {
    req.session.auth = null;
    res.clearCookie('auth');
    req.session.destroy(function() {});
  }
  res.redirect('/login');
});

... сеанс прерываетсяно когда я нажал кнопку «Назад» в моем браузере, я получил запрещенную страницу из кэша браузера.Это означает, что нет GET для '/ dashboard' и нет проверки логина пользователя.

Я пытался использовать no-cache в мета (Jade Template), но он все еще не работает.

meta(http-equiv='Cache-Control', content='no-store, no-cache, must-revalidate')
meta(http-equiv='Pragma', content='no-cache')
meta(http-equiv='Expires', content='-1')

Любой

Ответы [ 4 ]

52 голосов
/ 28 июня 2011

К сожалению, ответ Джоша не сработал для меня.Но после некоторого поиска я нашел этот вопрос: Как лучше всего обращаться с кешем и кнопкой возврата браузера?

и принял там ответ на эту проблему node.js / express.Вам просто нужно изменить следующую строку

res.header('Cache-Control', 'no-cache');

на

res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');

Теперь, каждый раз, когда я использую кнопку возврата браузера, страница перезагружается и не кэшируется.

* обновление для экспресс v4.x *

// caching disabled for every route
server.use(function(req, res, next) {
  res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
  next();
});

// otherwise put the res.set() call into the route-handler you want
6 голосов
/ 27 мая 2011
app.get('/dashboard', loadUser, function(req, res){
  res.header('Cache-Control', 'no-cache');
  res.header('Expires', 'Fri, 31 Dec 1998 12:00:00 GMT');

  res.render('dashboard', {
    username: req.session.username
  });
});
3 голосов
/ 06 июня 2018

Я использую Express ^ 4.16.3, и это сработало для меня, как сказал @ pkyeck.

Я добавил его к своим маршрутам вот так, и он работал нормально:

routes
.use(function(req, res, next) {
res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
        next();
          })
          .get('/login', function(req, res, next){
              .....
})
1 голос
/ 10 мая 2018

Простое решение - после очистки сеанса .. снова перенаправить на тот же маршрут .. например: у маршрута / сеанса есть переменные сеанса .. после нажатия кнопки выхода очистить переменные сеанса с помощью req.session.destroy(function() {});, после чего вы пытаетесь перенаправить домойpage ... INSTEAD для перенаправления на домашнюю страницу .. redirect / sessionedpage (тот же маршрут) ... Напишите условие if для / sessionedpage if (! res.sessions) затем res.redirect ('/ home')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...