Экспресс-сессия не сохраняется для Ipad

Я пытаюсь сохранить переменную сеанса для пользователя при входе в систему. Это работает на компьютере, но когда я пробую его на iPad с помощью Safari или Chrome, он не сохраняется.

Вот где я настроил свою сессию:

app.set('trust proxy', 1)
app.use(session({
  secret: crypto.randomBytes(20).toString('hex'),
  resave: false,
  duration: 60 * 60 * 1000,
  activeDuration: 10 * 60 * 1000,
  saveUninitialized: false,
  cookieName: 'session',
  cookie: { secure: true }
}))

Я использую этот маршрут для настройки пользователя:

.get('/checkLogin', (req,res) => {
  const loginCred = req.query;
  db.any('SELECT * FROM users WHERE user_name = $1 AND password = $2 LIMIT 1', [loginCred[0], loginCred[1]])
  .then(function (user) {
    req.session.user = user;
    req.session.save();
    res.end(JSON.stringify(user));
  })
  .catch(function (err) {
      throw err;
  })
})

Когда я консоль журнала, это устанавливается правильно. Затем, когда я вызываю сессию по возвращении, ее там нет. Я пытался добавить сохранение, но это все равно не сработало. Я также добавил maxage переменная сеанса, чтобы сохранить его в течение 3 дней, и он все еще не работал.

2 ответа

У вас есть файл cookie {secure: true}, для которого требуется, чтобы браузер установил HTTPS-соединение для отправки файла cookie сеанса обратно с запросом. Однако рекомендуется убедиться, что он подходит для вашей среды тестирования, убедитесь, что вы используете HTTPS на обоих устройствах

https://www.npmjs.com/package/express-session

Также с режимом разработки или производства и перезапуска Express после внесения изменений ваши секретные изменения после каждого перезапуска (от использования функции [crypto.randomBytes(20).toString('hex')] вместо статического ключа), вызывая идентификатор сеанса клиента для быть недействительным после перезапуска; что не должно иметь никакого значения, потому что у вас нет постоянной настройки сеансов, поэтому любой перезапуск уничтожит все сеансы. Если вам нужны постоянные сеансы, включите использование memcached, базы данных или файла вместо памяти процесса

https://www.npmjs.com/package/express-session

Попробуйте положить resave: true, Если это работает, вы можете изменить значение saveUninitialized

Другие вопросы по тегам