Express 会话在 Safari 中为空

Cam*_*sen 6 safari session node.js express

我正在使用 Express 构建 Node.js 应用程序。我使用快速会话进行会话。我在会话中存储的数据可在 IE、Chrome 和 Firefox 中使用。但在 Safari 中,会话始终为空。所以当我这样做时console.log(req.session)打印:

Session {
  cookie: { 
    path: '/',
    _expires: null,
    originalMaxAge: null,
    httpOnly: true,
    secure: true 
   },
   userHasCheckCorrect: true 
 }
Run Code Online (Sandbox Code Playgroud)

这是我在 server.js 中的设置

app.use(session({
  secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: true,
    cookie: {
        secure: true,
        httpOnly: true
    }
}));
Run Code Online (Sandbox Code Playgroud)

这是一个带有 SSL 证书的服务器,因此它是一个 HTTPS 域。使用 HTTP,它在 Safari 中似乎工作得很好。我在这里做错了什么?我缺少什么设置吗?我查了很多地方,但还没有找到答案。为什么它适用于除 Safari 之外的所有浏览器?

小智 1

对于 Safari,需要传入凭据:请求标头中的“include”,否则不会发送 cookie。

在设置会话中间件后,您可能还想通过如下方式设置全局响应标头:

app.use(function(req, res, next) {
    res.set('credentials', 'include');
    res.set('Access-Control-Allow-Credentials', true);
    res.set('Access-Control-Allow-Origin', req.headers.origin);
    res.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.set('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
    next();
});
Run Code Online (Sandbox Code Playgroud)