Свойство Express Session / Cookie maxAge обновляется по запросу - PullRequest
0 голосов
/ 11 октября 2018

Код в app.js

var cookieParser = require("cookie-parser")
var session = require("express-session")


app.use(cookieParser())

app.set('trust proxy', 1)
app.use(session(
  {
    "name": '***',
    "secret": '***',
    "cookie": {
      "maxAge": null,
      "expires": null,
      "httpOnly": true,
      "secure": true
    },
    "rolling": false,
    "saveUninitialized": false,
    "resave": false,

}))

При входе в систему эта конечная точка получает удар

req.session.username = email    // defaults to putting something in cookie
    req.session.cookie.maxAge = 1000 * 5
    req.session.touch()

Тест: поиск времени, оставшегося для файла cookie / сеанса

router.get('/refresh-session', function(req, res){
    if (req.session){
        console.log(req.session.username)
        console.log(req.session.cookie.maxAge)
    }

})

Моя цель - показать пользователю всплывающее окно с уведомлением о том, что его сеанс истекает.Я буду обновлять maxAge каждый раз, когда они переходят на новую страницу ... Однако перед этим мне нужно выяснить, каков текущий текущий maxAge.Это, кажется, обновляет максимальный возраст файла cookie.Но это обновление maxAge фактически не влияет на время истечения.

Например: если для maxAge установлено значение 5 секунд (в целях тестирования), то вызов метода для проверки maxAge будет постоянно находиться в пределах 4800-5000 миллисекунд.Однако через 5 секунд - независимо от того, сколько раз я обновляюсь - срок действия файла cookie истекает через 5 секунд (что и предполагалось).

Дело в том, почему id maxAge сбрасывается?

Я осмотрелся и нашел несколько бесполезных мерзавцев.Здесь: https://github.com/expressjs/session/issues/189#issuecomment-182631933 - не работает https://github.com/expressjs/session/issues/2 - очень бесполезно

Кто-нибудь сталкивался с этой проблемой или может предложить альтернативы?

1 Ответ

0 голосов
/ 08 ноября 2018

req.session.cookie.maxAge сообщает, сколько времени осталось в сеансе.Сбрасывается в конце запроса к исходному значению.Это задокументировано в README.md .

Ваш веб-интерфейс не может запросить у бэкэнда, сколько еще осталось сеанса, потому что сеанс затронут взапрос.Вы можете установить cookie.maxAge уже в параметрах сеанса, не нужно откладывать до входа в систему.Ваш веб-интерфейс должен хранить собственный таймер и сбрасывать его при каждом запросе к серверу.

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