如何解决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
相关产品推荐
相关产品推荐

