Экспресс-сессия не сохраняется для 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 на обоих устройствах
Также с режимом разработки или производства и перезапуска Express после внесения изменений ваши секретные изменения после каждого перезапуска (от использования функции [crypto.randomBytes(20).toString('hex')] вместо статического ключа), вызывая идентификатор сеанса клиента для быть недействительным после перезапуска; что не должно иметь никакого значения, потому что у вас нет постоянной настройки сеансов, поэтому любой перезапуск уничтожит все сеансы. Если вам нужны постоянные сеансы, включите использование memcached, базы данных или файла вместо памяти процесса
Попробуйте положить resave: true
, Если это работает, вы можете изменить значение saveUninitialized