多路径的 JS Cookie

JS Cookie for multiple paths

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

用户登录我的网络应用程序后,我会创建一个带有 JWT 令牌的 cookie,这样我就可以在每次请求时将其发送到我的后端以验证 token/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=/";

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

根据 standard:

Cookies with longer paths are listed before cookies with shorter paths.

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

转义(旁注)

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

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