解决此问题的初衷是:
前后端项目分离, 前端使用的是 react 的 axios ,后端是 node的 express,
然后想通过session在node 设置一分钟过期来判断前端短信验证码是否过期。
一般在 node 项目里配置好 允许跨域的配置,就能让axios 跨域访问了:
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Headers', 'X-Requested-With,Content-Type');
res.header('Access-Control-Allow-Methods', '*');
res.header("Access-Control-Allow-Origin", req.headers.origin);
res.header('Content-Type', 'application/json;charset=utf-8');
next();
});
🥠🥠问题就出在这个sessionID由于设置了允许跨域而导致前端发起请求的时候不被携带,即使后端有返回sessionID。
🥂🥂拓展:post请求满足什么条件才自动携带cookie?
👉 https://cloud.tencent.com/developer/article/1966765
但是咱们的项目是前端分离,难以保证每个请求都能满足上述条件,那怎么办?通过设置Credentials属性来强制请求带上 cookie。
官方文档的配置项里也有这一项:
👉 http://www.axios-js.com/zh-cn/docs/#%E8%AF%B7%E6%B1%82%E9%85%8D%E7%BD%AE
前端:
使用自定义的 axios:
axios.create({
withCredentials: true,
});
或者全局配置:
axios.defaults.withCredentials=true
后端:
//node 的 app.use里加上:
res.header('Access-Control-Allow-Credentials', 'true');
![](https://img.haomeiwen.com/i15697111/6f8935d0a46c77a9.png)
.
![](https://img.haomeiwen.com/i15697111/341c455f3d84e2d2.png)
可以看到即便是跨域了,不同的端口号也是跨域。cookie头信息样式能携带 sessionID 去请求服务器。
网友评论