У меня есть веб-приложение, которое использует экспресс-сессию.Все отлично работает на 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.