英文:
how to get a cookie for with the same name for both `.domain.com` and `domain.com` js-cookie
问题
分析:
用户使用了js-cookie库并遇到了一个问题,即在存在同名但不同域的cookie时,如何获取具有域值.domain.com
的cookie。用户尝试查看源代码,发现get
函数似乎会创建一个以名称为索引的对象,因此如果存在同名但不同域的两个cookie,后者会覆盖前者。
用户提供了一个示例代码,但在尝试解决问题时遇到了困难。
想法:
用户想知道如何获取具有域值.domain.com
的cookie,即使同名的domain.com
的cookie也存在。用户已经尝试了一些方法,但仍然困惑。
推测:
可能需要查看js-cookie库的文档以获取有关如何正确处理具有不同域的同名cookie的信息。也许有一些特殊的选项或方法可以帮助解决这个问题。
汉化后的代码:(原文代码部分不翻译)
import Cookie from 'js-cookie';
// 这两个cookie中的一个将无法通过Cookie.get获取
Cookie.set('myCookie', 'myValue1', { domain: '.domain.com' });
Cookie.set('myCookie', 'myValue2', { domain: 'domain.com' });
英文:
I'm using the js-cookie library library and I can't figure out how to get the a cookie with a domain value of .domain.com
if a cookie with same name exists for domain.com
. I've looked at the source and the get
function seems to create an object indexed by the name so it will be overridden if two cookies with the same name but different domains exist.
an example:
import Cookie from 'js-cookie'
// one of these two cookies will be unavailable via Cookie.get
Cookie.set('myCookie', 'myValue1', {domain: '.domain.com'})
Cookie.set('myCookie', 'myValue2', {domain: 'domain.com'})
I thought maybe the withAttributes function could help but I think that changes attributes when creating a cookie. I'm not totally sure though the docs are sparse there and i can't figure out the code.
答案1
得分: 1
分析:这段内容讨论了关于同名的不同Cookie在同时生效的问题。文档指出无法通过传递Cookie的属性之一来读取特定的Cookie,例如在写入Cookie时可能使用的属性:
Cookies.get('foo', { domain: 'sub.example.com' }) // `domain` won't have any effect
推测:名为foo
的Cookie只有在代码调用的位置可见时才能在.get()
中使用;在读取时,域名和/或路径属性将不会产生影响。
汉化后的代码:同名的不同Cookie不能同时生效。文档指出:
Cookies.get('foo', { domain: 'sub.example.com' }) // `domain`不会产生影响
这是库的限制,而不是浏览器仅使一个Cookie可见的限制。
英文:
You can't have multiple different cookies with the same name being in effect at the same time. The docs say
> Note: It is not possible to read a particular cookie by passing one of the cookie attributes (which may or may not have been used when writing the cookie in question):
>
> Cookies.get('foo', { domain: 'sub.example.com' }) // domain
won't have any effect
>
> The cookie with the name foo
will only be available on .get()
if it's visible from where the code is called; the domain and/or path attribute will not have an effect when reading.
This is not a limitation of the library, it's the browser that makes only one cookie visible.
答案2
得分: -1
你可以按名称和域检索Cookie,如下所示:
import Cookie from 'js-cookie';
function getCookieByDomain(name, domain) {
const cookies = Cookie.get();
const matchingCookies = Object.entries(cookies).filter(([cookieName]) => cookieName === name);
// 搜索具有指定域的Cookie
const cookieWithDomain = matchingCookies.find(([cookieName, cookieValue]) => {
const cookieOptions = Cookie.getJSON(cookieName, { raw: true });
return cookieOptions.domain === domain;
});
if (cookieWithDomain) {
const [cookieName, cookieValue] = cookieWithDomain;
return { [cookieName]: cookieValue };
}
return null; // 未找到具有指定域的Cookie
}
// 用法:
const cookieForDomain = getCookieByDomain('myCookie', '.domain.com');
console.log(cookieForDomain); // 如果存在,则输出:{ myCookie: 'myValue1' },否则输出 null
英文:
you can retrieve the cookie by name and domain like so
import Cookie from 'js-cookie';
function getCookieByDomain(name, domain) {
const cookies = Cookie.get();
const matchingCookies = Object.entries(cookies).filter(([cookieName]) => cookieName === name);
// Search for a cookie with the specified domain
const cookieWithDomain = matchingCookies.find(([cookieName, cookieValue]) => {
const cookieOptions = Cookie.getJSON(cookieName, { raw: true });
return cookieOptions.domain === domain;
});
if (cookieWithDomain) {
const [cookieName, cookieValue] = cookieWithDomain;
return { [cookieName]: cookieValue };
}
return null; // Cookie not found with the specified domain
}
// Usage:
const cookieForDomain = getCookieByDomain('myCookie', '.domain.com');
console.log(cookieForDomain); // Outputs: { myCookie: 'myValue1' } if it exists, otherwise null
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论