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

无浏览器测试时axios授权成功后如何保留session并携带至后续请求

解决方案

核心原因

Node.js 环境下的 axios 原生不支持自动存储、管理 cookie,withCredentials 参数仅对浏览器端的 XMLHttpRequest 生效,这就是你配置了该参数依然返回401的核心原因。

安装两个必要依赖:

npm install tough-cookie axios-cookiejar-support

修改代码如下即可实现 cookie 自动存储和携带:

const axios = require('axios').default;
const { CookieJar } = require('tough-cookie');
const { wrapper } = require('axios-cookiejar-support');

// 包装axios实例,开启cookie自动管理能力
const jar = new CookieJar();
const client = wrapper(axios.create({
  baseURL: 'http://localhost:4040',
  withCredentials: true,
  jar // 绑定cookie存储实例
}));

const userDoc = {
  userId: 'test-user-1',
  userName: 'Test User 1',
  emailId: 'test.user.1@abc.xom',
  password: 'test-password'
};

// 登录请求,返回的cookie会自动存入jar实例
const loginResp = await client.post('/auth/local', {
  userId: userDoc.userId,
  password: userDoc.password
});

// 后续请求会自动匹配域名/路径携带对应cookie,不需要手动配置header
const businessResp = await client.post('/v1/master/account', accountDoc);

手动配置Cookie头的修正方案

如果你不想引入额外依赖,需要修正手动配置cookie的逻辑:set-cookie响应头中包含HttpOnly、Domain、Path等附加属性,不能直接整个字符串塞入请求头,需要提取纯键值对部分:

// 登录请求后提取cookie
const rawCookie = resp.headers['set-cookie'][0];
// 取第一个分号前的键值对内容
const cookieValue = rawCookie.split(';')[0];
const headers = {
  Cookie: cookieValue
};

// 发起后续请求
const businessResp = await axios({
  method: 'post',
  url: 'http://localhost:4040/v1/master/account',
  data: accountDoc,
  headers
});

额外排查点

如果以上方案依然无效,可以确认服务端配置:

  • 检查返回的set-cookie中Path属性是否匹配后续请求的路径
  • 确认如果生产环境开启了Secure属性,请求是否为HTTPS协议
  • 确认cookie的Domain属性和请求域名是否匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:15:02