Сессия ExpressJS истекает, несмотря на активность
Привлечение этого вопроса к SO, так как экспресс-группа не ответила.
Я устанавливаю сеанс maxAge = 900000, и я вижу, что свойство expires в cookie сеанса установлено правильно.
Однако при последующих запросах тайм-аут не продлевается. Он никогда не расширяется, и файл cookie в конце концов истекает.
В документах промежуточного программного обеспечения сеанса говорится, что Session # touch() не требуется, потому что промежуточное программное обеспечение сеанса будет делать это для меня. Я действительно пытался называть req.session.touch()
вручную, и ничего не сделал, я также попытался установить maxAge на req.session.cookie
, а также ничего не сделал: - (
Мне не хватает какой-либо настройки для автоматического продления активных сеансов? За исключением повторного создания cookie вручную по каждому запросу есть ли другой способ продлить время ожидания сеанса после активности конечного пользователя?
EDIT: Я столкнулся с этой проблемой в express v3. Я не уверен на 100%, но я думаю, что эта заметка из выраженного журнала изменений, возможно, была виновницей:
Ответы
Ответ 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
}));