You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React开发中登录后页面刷新Ajax保持登录但Axios失效问题咨询

Axios登录态刷新丢失问题解答

这个差异不属于jQuery Ajax与Axios的预期原生差异,完全是配置和用法疏漏导致的,和两个请求库本身的功能定位无关。

导致该问题的核心原因有两个:

  • 身份凭证携带配置的默认值不同
    jQuery的$.ajax在发送同域请求时默认会自动携带当前域名下的Cookie,而Axios默认的withCredentials配置项为false,不会主动在请求中携带Cookie。登录态一般是存储在Cookie中的,Axios请求/retrieveUser接口时没有携带身份Cookie,后端无法识别用户身份,自然返回未登录的结果,就表现为刷新后登录态丢失。

  • 响应数据的取值逻辑不同
    $.ajax的success回调入参直接是接口返回的响应体,你可以直接取res.id做判断;但Axios的then回调入参是经过封装的完整响应对象,实际接口返回的数据存在res.data字段下。你现有代码直接判断res.id必然返回undefined,永远不会触发loginCheck逻辑,这也是登录态看起来失效的核心原因。


修复方案

调整Axios请求的配置和取值逻辑即可,修改后代码如下:

componentDidMount() {
  axios({
    method: 'GET',
    url: '/retrieveUser',
    withCredentials: true // 新增配置,允许携带Cookie
  })
  .then(res => {
    // 从res.data中取实际接口返回的内容
    if (res.data.id) this.loginCheck(res.data);
  })
}

如果项目中多处请求都需要携带Cookie,可以直接设置全局默认配置,不用每个请求单独加:

axios.defaults.withCredentials = true

内容的提问来源于stack exchange,提问作者femtowatts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 18:18:01