Подтвердить что ты не робот

Сессия ExpressJS истекает, несмотря на активность

Привлечение этого вопроса к SO, так как экспресс-группа не ответила.

Я устанавливаю сеанс maxAge = 900000, и я вижу, что свойство expires в cookie сеанса установлено правильно. Однако при последующих запросах тайм-аут не продлевается. Он никогда не расширяется, и файл cookie в конце концов истекает.

В документах промежуточного программного обеспечения сеанса говорится, что Session # touch() не требуется, потому что промежуточное программное обеспечение сеанса будет делать это для меня. Я действительно пытался называть req.session.touch() вручную, и ничего не сделал, я также попытался установить maxAge на req.session.cookie, а также ничего не сделал: - (

Мне не хватает какой-либо настройки для автоматического продления активных сеансов? За исключением повторного создания cookie вручную по каждому запросу есть ли другой способ продлить время ожидания сеанса после активности конечного пользователя?


EDIT: Я столкнулся с этой проблемой в express v3. Я не уверен на 100%, но я думаю, что эта заметка из выраженного журнала изменений, возможно, была виновницей:

4b9b3361

Ответ 1

Вот решение, если у кого-то другая проблема:

function (req, res, next) {

    if ('HEAD' == req.method || 'OPTIONS' == req.method) return next();

    // break session hash / force express to spit out a new cookie once per second at most
    req.session._garbage = Date();
    req.session.touch();

    next();

}

Ответ 2

Теперь сеансы прокатки существуют в экспресс-сеансах. Установка атрибута roll для true в параметрах, он пересчитает значение срока действия, установив смещение maxAge, применяемое к текущему времени.

https://github.com/expressjs/session/issues/3

https://github.com/expressjs/session/issues/33

https://github.com/expressjs/session (поиск прокатки)

Например, обратите внимание на rolling:

app.use(session({
  secret: 'a secret',
  cookie: {
    path: '/',
    httpOnly: true,
    secure: false,
    maxAge: 10 * 60 * 1000
  },
  rolling: true
}));