Express Session无法保存在iOS Safari中

时间:2018-11-28 08:27:51

标签: express google-app-engine safari express-session

我有一个使用快速会话的Web应用程序。在Safari和MacOS上的Chrome以及在iOS上的Chrome上,一切正常。但是,在iOS Safari上,尽管会话已保存到商店,但Safari似乎在后续页面加载时生成了新会话。对于我来说不幸的是,此Web应用程序的目标浏览器实际上是Safari上的iOS(这是我无法控制的)。

尽管此问题出现在使用Postgres支持的会话存储的更复杂的Web应用程序中,但我也可以使用开箱即用的Express Generator创建的应用程序重新创建它。

对于测试应用,会话的配置如下:

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

在/ users路由上,我设置了一个新的foo对象

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

索引路由仅打印出会话的值。

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

在除移动Safari之外的所有浏览器上,会话都包含foo(在访问/users路由之后。

有人知道这里会发生什么吗?这是托管在Google App Engine上的,我也尝试过设置trust proxy

已经使用Nginx和相同的主要节点版本(8)在Google Compute Engine上运行了该测试应用程序,我可以确认这确实适用于移动Safari。因此看来问题出在App Engine沿线的某个地方。

更多测试表明,即使设置了secure:true,也是trust proxy引起了问题。不知道这是iOS错误,Express还是App Engine问题。

0 个答案:

没有答案