Node + Экспресс-срок окончания сеанса?

У меня есть приложение в экспресс, и у меня есть форма для входа. Мне нужно, чтобы сеансы длились 1 месяц, я устанавливаю maxAge в месяц в миллисекундах.

Я оставил два компьютера и вошел в систему в течение 24 часов, и когда я вернулся, оба были выведены из системы.

Как мне исправить это/добиться того, что я пытаюсь сделать? Спасибо.

Ответ 1

Вы можете использовать атрибут expires вместо maxAge. В качестве значения объекта Date объект принимает значение. Кроме того, проверьте сеанс cookie exipres на клиенте после их установки. Возможно, сеанс завершен сервером (например, перезапуск memcached).

Пример кода:

app.use(express.session(
  { secret: "secret", store: new MemoryStore(), expires: new Date(Date.now() + (30 * 86400 * 1000)) 
  }));

но

  app.use(express.session(
    { secret: "secret", store: new MemoryStore(), maxAge: Date.now() + (30 * 86400 * 1000) 
    }));

отлично работает и для меня.

Ответ 2

maxAge означает продолжительность сеанса в мс; expires означает, когда сессия истечет, то есть: объект даты

var hour = 3600000
req.session.cookie.expires = new Date(Date.now() + hour)

или же

var hour = 3600000
req.session.cookie.maxAge = hour

Документация

Ответ 3

app.use(express.session({
    secret  : 'sdfsdSDFD5sf4rt4egrt4drgsdFSD4e5',
    store   : new storage({ client : conn, cleanup: false }),
    cookie  : { maxAge  : new Date(Date.now() + (60 * 1000 * 30)) }
}));

Ответ 4

Документация не рекомендует напрямую устанавливать cookie.expires. Вместо этого установите cookie.maxAge напрямую.

Экспресс-сессия - cookie.expires

Ответ 5

Принятый ответ Вадима Барышева ошибочен, по крайней мере, в последних реализациях экспресс-сессии. Когда приложение запускается, вы создаете реализацию сеанса и устанавливаете максимальный возраст. Что касается ответа с использованием истечения срока действия, то это не рекомендуется, придерживайтесь maxAge.

Это означает, что пример maxAge как написанный истекает через каждые один сеанс через месяц после запуска сервера, и каждый сеанс, созданный в будущем, будет немедленно истек. До тех пор, пока сервер не будет перезапущен, не будет никаких действительных сеансов.

Вместо передачи объекта date просто передайте количество миллисекунд в свойство maxAge, например:

app.use(
  session({
    ...,
    cookie: {
      maxAge: 30 * 24 * 60 * 60 * 1000
    }
  })
);