Node.js Safari中的Express会话为空
我正在用express构建一个Node.js应用程序。我使用express session进行会话。我在会话中存储的数据可以在IE、Chrome和Firefox中使用。但在Safari中,会话始终是空的。因此,当我执行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
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?