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)
| 归档时间: |
|
| 查看次数: |
2199 次 |
| 最近记录: |