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

如何解决JavaScript setCookie函数调用覆盖/删除已有Cookie的问题

问题原因

Node.js 原生的 res.setHeader 方法会直接覆盖已存在的同名字段,而HTTP协议规定如果要设置多个Cookie,需要返回多个Set-Cookie响应头。你当前的setCookie函数每次调用都直接调用res.setHeader写入Set-Cookie,所以第二次调用会直接覆盖第一次写入的内容,最终只有最后一次设置的Cookie生效。

修复方案

修改setCookie函数,每次写入新Cookie时先读取已有的Set-Cookie响应头,将新Cookie追加到列表后再整体写入:

import { serialize } from 'cookie';

export default function setCookie(res, name, value, options = {}) {
  console.log('SET COOKIE', name, value); 
  const stringValue =
    typeof value === 'object' ? 'j:' + JSON.stringify(value) : String(value);

  if ('maxAge' in options) {
    options.expires = new Date(Date.now() + options.maxAge);
    options.maxAge /= 1000;
  }

  console.log(stringValue);

  // 新增多Cookie追加逻辑
  const existingCookies = res.getHeader('Set-Cookie') || [];
  const cookiesList = Array.isArray(existingCookies) ? existingCookies : [existingCookies];
  cookiesList.push(serialize(name, stringValue, options));
  res.setHeader('Set-Cookie', cookiesList);
}

修改后两次调用setCookie会返回两个独立的Set-Cookie响应头,conversationId和memberId都可以正常写入浏览器Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:27:03