Axios之请求如何携带cookie用于session认证

Axios如何解决跨域

在这里插入图片描述

vue3中报错

Access to XMLHttpRequest at ‘http://127.0.0.1:3001/api/login’ from origin ‘http://127.0.0.1:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: The value of the ‘Access-Control-Allow-Origin’ header in the response must not be the wildcard ‘*’ when the request’s credentials mode is ‘include’. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

如何解决呢?

项目中使用cookie是用于记录图片验证的时间,后端是express框架基于svg-captcha中间生成的验证码,将生成的验证码储存到redis中,设置好session的有效时间,到session过期redis会自动清楚对应的键值,为后端只需要判断前端传送过来的session是否有效就可以判断此验证码是否可用

接下来如何让axios携带cookie向后端发送请求呢?

前端在axios的封装中加入这样的一端参数

axios.defaults.withCredentials = true;//携带cookie

这样加入保存之后,后端也要设置的不然会报错,报跨域的错误,如下
在这里插入图片描述
我的后端是用nodejs的express框架写的,我们引入中间件cors用于来解决跨域
下面是cors的参数设置

app.use(cors({
  credentials: true,
  origin: 'http://127.0.0.1:8080', // web前端服务器地址
}));//解决跨域

里面的origin通俗的讲就是将请求重定向,变成同域下的可以访问的,也可以说是加入白名单,看你的个人理解

这样配置完事,cookie跨域成功解决
下面是测试结果
在这里插入图片描述
在这里插入图片描述
过期也是一致的,这里不做展示了

如果本篇文章对你有帮助给博主点个小小的关注

<think>嗯,用户的问题是为什么在浏览器开发者工具里看到的请求头里没有Session Cookie,以及怎么解决这个问题。我需要仔细分析可能的原因,然后给出解决方案。 首先,得了解Session Cookie的特性。根据引用[1],会话Cookie在浏览器关闭后会被删除,而持久化Cookie则保存在硬盘上。如果用户看到请求头里没有Session Cookie,可能是因为Cookie没有被正确发送或者存储。 可能的原因有几个:首先是Cookie未设置成功。服务器在响应时可能没有正确设置Set-Cookie头,或者路径、域名限制导致Cookie没有被保存。这时候需要检查服务器返回的响应头里有没有Set-Cookie,以及属性是否正确,比如Secure、HttpOnly、SameSite等设置是否影响了Cookie的发送。 其次是跨域问题。如果请求是跨域的,浏览器的安全策略可能会阻止Cookie的发送。这时候需要检查CORS配置,确保服务器设置了Access-Control-Allow-Credentials为true,并且前端请求启用了withCredentials选项。同时,SameSite属性如果设置为Strict或Lax,跨站请求可能不会携带Cookie,可以尝试设置为None并配合Secure使用。 另外,开发者工具的设置也可能影响显示。有时候可能过滤器隐藏了Cookie信息,或者网络面板的设置没有勾选显示Cookie选项。需要指导用户检查这些设置,确保请求头里的Cookie是可见的。 解决方法的话,首先应该检查服务器的响应头,确认Set-Cookie是否正确。然后检查Cookie的路径和域名是否匹配当前请求,避免作用域不匹配。如果是跨域问题,调整CORS和SameSite设置。此外,清除浏览器缓存和Cookie后重新登录,可以排除旧Cookie的干扰。如果使用隐身模式测试,可以避免浏览器插件的影响。 最后,用户可能需要逐步排查,从服务器设置到浏览器配置,逐一检查可能的问题点。如果有具体的案例或代码示例,可以更直观地帮助用户理解问题所在。同时,引用中的信息需要正确标注来源,比如关于会话Cookie和持久化Cookie的区别来自引用[1],Storage部分来自引用[2],而开发者工具的使用可以参考引用[3]的链接。</think>### 排查浏览器请求头未携带Session Cookie的原因及解决方法 #### 一、可能原因分析 1. **Cookie未设置成功** - 服务器未正确返回`Set-Cookie`响应头,或Cookie属性(如`Secure`、`HttpOnly`、`SameSite`)导致浏览器拒绝存储[^1]。 - 示例:服务器返回的Cookie作用域(`Domain`/`Path`)与当前请求的URL不匹配。 2. **跨域请求限制** - 跨域请求默认不携带Cookie,需满足以下条件: ```http Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: 明确指定域名(不能为*) ``` 且前端需设置`withCredentials: true`[^2]。 3. **浏览器隐私设置或扩展程序干扰** - 浏览器设置了阻止第三方Cookie,或广告拦截插件过滤了Cookie头。 4. **开发者工具显示过滤** - 网络面板中可能未勾选"Request Headers > Cookies"选项,或使用了过滤器隐藏了Cookie信息[^3]。 #### 二、解决方法 1. **验证服务器响应头** - 在开发者工具网络面板中,检查目标请求的响应头是否包含`Set-Cookie`: ```http Set-Cookie: sessionid=abc123; Path=/; HttpOnly; SameSite=Lax ``` 若缺失,需检查服务器端Session配置。 2. **调整Cookie属性** - 对于本地开发环境(非HTTPS),移除`Secure`属性: ```python # Django示例 SESSION_COOKIE_SECURE = False # 仅限开发环境 ``` - 跨站请求时设置`SameSite=None; Secure`(需HTTPS)。 3. **强制携带Cookie测试** - 通过控制台手动注入Cookie: ```javascript document.cookie = "sessionid=test_value; path=/"; ``` 刷新页面后观察请求头变化。 4. **清除浏览器状态** - 执行硬性刷新(Ctrl+Shift+R),清除所有Cookie后重新登录。 - 使用隐身模式测试,排除插件干扰。 #### 三、验证流程 ```mermaid graph TD A[发起请求] --> B{响应头含Set-Cookie?} B -->|是| C[检查Cookie存储] B -->|否| D[修复服务器配置] C --> E{请求携带Cookie?} E -->|是| F[完成验证] E -->|否| G[检查跨域/Cookie属性] ``` #### 四、典型案例 某Vue应用访问API时未携带Cookie,原因为: 1. 后端CORS配置缺失`Access-Control-Allow-Credentials` 2. 前端axios未设置`withCredentials: true` 3. Cookie的`SameSite`属性限制跨站传递 解决方法: ```javascript // 前端axios配置 axios.defaults.withCredentials = true; // 后端(Node.js/Express示例) app.use(cors({ origin: 'http://localhost:8080', credentials: true })); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执着1111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值