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

如何使用js-cookie获取.domain.com与domain.com下的同名Cookie?

解决js-cookie同名不同域Cookie被覆盖的问题

问题原因

js-cookie的get()方法解析Cookie时,会以Cookie名称作为对象键名,当存在同名但不同域的Cookie时,后解析到的Cookie值会覆盖先解析的,导致无法获取所有同名Cookie。

由于js-cookie的封装逻辑限制,要获取同名不同域的Cookie,需要直接操作document.cookie并自定义解析逻辑:

import Cookies from 'js-cookie';

// 自定义函数:获取所有Cookie,包含域名信息
function getAllCookiesWithDomain() {
  return document.cookie.split(';').map(cookie => {
    const [nameValue, ...attrs] = cookie.trim().split(';');
    const [name, value] = nameValue.split('=').map(decodeURIComponent);
    const cookieObj = { name, value };
    // 解析domain属性
    const domainAttr = attrs.find(attr => attr.trim().startsWith('domain='));
    if (domainAttr) {
      cookieObj.domain = domainAttr.trim().split('=')[1];
    }
    return cookieObj;
  });
}

// 获取指定名称的所有Cookie(含不同域)
function getCookieWithDomain(name) {
  return getAllCookiesWithDomain().filter(cookie => cookie.name === name);
}

// 使用示例
Cookies.set('myCookie', 'myValue1', {domain: '.domain.com'});
Cookies.set('myCookie', 'myValue2', {domain: 'domain.com'});

// 获取所有同名Cookie
console.log(getCookieWithDomain('myCookie'));
// 输出:[{name: 'myCookie', value: 'myValue1', domain: '.domain.com'}, {name: 'myCookie', value: 'myValue2', domain: 'domain.com'}]

withAttributes的正确用法

withAttributes的作用是预设Cookie的默认属性,简化重复设置相同属性的操作,不能解决同名不同域Cookie的获取问题,示例如下:

// 创建预设domain为`.domain.com`的Cookie实例
const SubdomainCookie = Cookies.withAttributes({ domain: '.domain.com' });

// 无需重复指定domain,自动应用预设
SubdomainCookie.set('myCookie', 'myValue1');

// 获取时仍遵循js-cookie原有逻辑,若存在同名不同域Cookie仍会被覆盖
console.log(SubdomainCookie.get('myCookie')); // 仅返回最后解析到的那个值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:27:18