【问题标题】:JS Cookie for multiple paths多路径的 JS Cookie
【发布时间】:2021-08-19 15:48:43
【问题描述】:

我遇到了一个愚蠢的问题,但似乎找不到解决方案。

一旦用户登录我的网络应用程序,我会创建一个带有 JWT 令牌的 cookie,这样我就可以在每次请求时将其发送到我的后端以验证令牌/cookie。

if (idToken) {
    document.cookie = "token=" + idToken;
    window.location.assign('/dashboard');
}

这适用于所有不分页子路由的页面,例如:(“/dashboard”、“/help”、“/etc”)。

问题:

现在我有一个子路由:www.domain.com/abc/xyz

当请求转到该路由 /abc/xyz 时,我看到在浏览器中创建了两个 cookie,一个在 /(根路径)上,另一个在 /abc 路径上。这引起了我的麻烦,因为我的后端检索了当前路径的 requests.cookie,即 /abc,最终我得到了一个无效的 cookie。

我该如何正确处理这个问题?我试图用根路径设置一个“全局”cookie,但它似乎对我不起作用:

document.cookie = "token=" + idToken + ";path=/";

【问题讨论】:

    标签: javascript cookies


    【解决方案1】:

    According to MDN,指定path=/ 的路径确实会匹配所有子目录。因此,您提出的解决方案应该可以工作,并且您可能只需要清理 cookie 以确保之前的 cookie 不会干扰。

    根据standard

    路径较长的 cookie 列在 cookie 之前 更短的路径。

    如果您在 /abc 上的旧 cookie 仍然存在,它将优先于您的新 cookie。

    转义(在旁注中)

    根据您的idToken 的来源,在设置cookie 之前将其转义可能是个好主意。如果您的令牌出于某种原因包含;,那么这不会破坏您的网站。

    document.cookie = "token=" + encodeURIComponent(idToken) + ";path=/";
    

    【讨论】:

    • 谢谢,这确实是上一次会话在 /abc 上留下的 cookie。
    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2019-09-16
    • 1970-01-01
    • 2014-02-15
    • 2012-11-26
    • 2012-08-04
    相关资源
    最近更新 更多