【发布时间】:2021-05-19 04:35:03
【问题描述】:
我正在努力详细了解 cookie 凭据。 主要问题是我的前端和后端在不同的域上运行。在 localhost 上,它们具有不同的端口(localhost:4200 和 localhost:3000),在我的服务器上具有不同的子域(example.com 和 api.example.com)。
基本设置:
Angular 发送帖子请求以登录:
this.http.post(environment.apiUrl + 'users', credentials)
NodeJS 验证请求并创建一个快速会话(数据库中的会话和带有 sessionId 的 cookie):
app.use(session({
secret: process.env.SECRET,
saveUninitialized: false,
store: mongoDBStore,
name: 'node_session',
cookie: {
secure: true,
httpOnly: true,
maxAge: 5 * 60 * 1000
}
}));
app.post('/', (req, res) => {
// some validations
req.session.userId = result._id;
res.send(result._id);
}
我的理解
据我了解,cookie 是为服务器域存储的。因此,如果两者都在同一个域上运行,则在每个请求上,后端都可以使用会话 cookie。但是对于不同的域,会话在进一步请求时为空。
另外,我在前端和后端找到了 cookie node_session。因此,如果我将 { withCredentials: true } 添加到 Angular 的请求中,一切正常。但在这种情况下,我使用前端的 cookie。
我的问题:
使用前端 cookie 是否安全?
为什么前端和后端都能找到会话cookie?
为什么我的后端找不到会话 cookie?
【问题讨论】:
标签: node.js angular cookies express-session