Экспресс-сессия не сохраняется в iOS-сафари - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть веб-приложение, которое использует экспресс-сессию.Все отлично работает на Safari и Chrome на MacOS и на Chrome на iOS.Однако в iOS Safari, хотя сеанс сохраняется в хранилище, Safari, похоже, генерирует новый сеанс при последующей загрузке страницы.К сожалению для меня, целевым браузером для этого веб-приложения на самом деле является iOS в Safari (это что-то вне моего контроля).

Хотя эта проблема возникает в более сложном веб-приложении, использующем хранилище сессий Postgres, ятакже можно воссоздать его с помощью готового приложения, созданного экспресс-генератором.

Для тестовых сессий приложения настраиваются следующим образом:

app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: 'xxxxxxxxxxxx',
  proxy: true,
  cookie: {secure:true},rolling: true
}));

И на маршруте / users я установилnew foo object

/* GET users listing. */
router.get('/', function(req, res, next) {
  req.session.foo = "Foo in session"
  res.send('respond with a resource');
});

Маршрут Index просто выводит значение сеанса.

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express', session:JSON.stringify(req.session) });
});

В любом браузере, кроме мобильного Safari, сеанс включает foo (после посещения/users route.

Кто-нибудь знает, что здесь может происходить? Это происходит на Google App Engine, и я также пробовал это с установленным trust proxy.

Запустив это тестовое приложение на Google Compute Engine, используя Nginx и ту же версию основного узла (8), я могу подтвердить, что это работает на мобильном сафари. Таким образом, похоже, что проблема связана с App Engine где-то ужеg the line.

Дальнейшее тестирование показало, что secure:true вызывает проблему даже при установленном trust proxy.Не уверен, что это ошибка iOS, Express или проблема с App Engine.

...