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

k6测试会话Cookie过期时间异常(显示18世纪)致请求失败求助

针对你遇到的k6+TypeScript测试中会话Cookie失效的问题,原因和解决办法如下:

问题原因
  • k6对会话Cookie的自动解析逻辑有兼容缺陷:标准会话Cookie不会携带Expires或Max-Age属性,但k6处理这类Cookie时,会默认填充一个无效的负时间戳(也就是你看到的-6795364578871),导致内部判定Cookie已过期并直接丢弃。
  • 服务器返回的Cookie头格式不符合标准:部分后端服务在返回会话Cookie时,错误地附加了格式异常的Expires字段,k6解析后得到这个离谱的过期时间,进而触发了丢弃逻辑。
解决办法
  • 手动注入会话Cookie:跳过k6的自动Cookie解析流程,直接用http.setCookie方法手动添加会话Cookie,不指定过期时间(或设置一个合理的未来时间)。示例代码:
    http.setCookie({
      name: "SESSION_TOKEN",
      value: "your-actual-session-value",
      domain: "your-app-domain.com",
      path: "/",
      secure: true, // 按实际应用的HTTPS配置调整
      httpOnly: false // 按Cookie实际属性调整
    });
    
  • 拦截响应修正Cookie属性:用k6的handleResponse钩子捕获服务器返回的Cookie,删除无效的expires属性,或者替换为正常的未来时间。示例:
    export const options = {
      hooks: {
        handleResponse(response) {
          Object.values(response.cookies).forEach(cookieArr => {
            const cookie = cookieArr[0];
            // 删除无效的过期时间,转为标准会话Cookie
            delete cookie.expires;
            // 也可以设置一个1小时后过期的时间替代
            // cookie.expires = new Date(Date.now() + 3600 * 1000).toUTCString();
          });
        }
      }
    };
    
  • 排查后端Cookie配置:确认服务器返回的会话Cookie没有多余的Expires或Max-Age字段,严格遵循会话Cookie的标准定义——只包含名称、值、域名、路径等必要属性。
  • 自定义CookieJar管理会话:创建独立的CookieJar手动管理会话Cookie,绕过k6的自动解析逻辑。示例:
    const customJar = http.cookieJar();
    // 给目标域名添加会话Cookie
    customJar.set("https://your-app-domain.com", "SESSION_TOKEN", "your-session-value", {
      path: "/",
      secure: true
    });
    // 后续请求指定使用这个CookieJar
    const res = http.get("https://your-app-domain.com/api/protected", { jar: customJar });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:12:17