Node.js Safari中的Express会话为空

Node.js Safari中的Express会话为空,node.js,express,session,safari,Node.js,Express,Session,Safari,我正在用express构建一个Node.js应用程序。我使用express session进行会话。我在会话中存储的数据可以在IE、Chrome和Firefox中使用。但在Safari中,会话始终是空的。因此,当我执行console.log(req.session)时,它会打印: Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true, s

我正在用express构建一个Node.js应用程序。我使用express session进行会话。我在会话中存储的数据可以在IE、Chrome和Firefox中使用。但在Safari中,会话始终是空的。因此,当我执行
console.log(req.session)
时,它会打印:

Session {
  cookie: { 
    path: '/',
    _expires: null,
    originalMaxAge: null,
    httpOnly: true,
    secure: true 
   },
   userHasCheckCorrect: true 
 }
这是我在server.js中的设置

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

它是一个具有SSL证书的服务器,因此是一个HTTPS域。使用HTTP,它在Safari中似乎运行良好。我做错了什么?有没有我错过的场景?我看了很多地方,但还没有找到答案。为什么除了Safari之外,它可以在所有浏览器中工作

使用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();
});

您需要在server.js设置中从@anttud启用safari cookies吗?我无法从Safari浏览器设置中找到可能的方法,但这只解决了我的问题,是否有办法在服务器端执行此操作?不,这是客户端问题。但是如果有人正在使用Safari,他们可能已经启用了cookies。您可以在前端添加一个弹出窗口,告诉他们启用Cookie?