getCookie( "cookiename" ) 显示带有 % 的值如何在没有它的情况下获取值



我正在使用以下命令在节点服务器代码中设置cookie:

let userid = db._id  //console.log shows the id as :  abc123456789d
res.cookie("uid", userid , { sameSite: "none", secure: true })

这是正确的方式还是我做错了什么?

在我的前端应用程序中,我使用js获取cookie,使用以下代码:

let x =  document.cookie
let cookie = getCookie("uid")
console.log("cookies value:",cookie)

控制台日志显示cookie值如下:

j%3A%abc123456789d%22

我尝试用JSON.stringify((设置cookie,前面显示的cookie值如下:

%3A%abc123456789d%22

我的问题是,为什么我不能获得没有%value%22的值,以及如何更正此输出,以便我从数据库中获得id的值,该数据库应该是

abc123456789d

注意,我在这里提到的id只是为了演示,在现实生活中并不存在。我从数据库中得到的id是48个字符,只有字母和数字(没有特殊字符,类似于666de2f0600eda239ae05d88(

这是我第一次尝试使用js获取cookie值,所以我似乎错过了一些东西,在网上阅读后,我不明白为什么这个%%22围绕着我的id。知道为什么以及如何修复它吗?

我的猜测是缺少URI解码/编码

decodeURIComponent((函数解码统一资源以前由encodeURIComponent或通过类似的程序。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent

我最终得到了这个:

let x =  document.cookie
let decodit = decodeURIComponent(x).split(":").toString()
let sliceit = decodit.slice(7, 31)

谢谢csx.cc…你的回答引导我朝着正确的方向前进。

我使用的是express和cookie解析器。在阅读了他们如何编码cookie后,我在stackoverflow.com上找到了答案,答案如下(我对答案投了赞成票,任何阅读本文的人都应该这样做。链接到最后的答案(

关于外部库的说明:如果您决定使用express、cookie解析器或cookie,请注意它们的默认值是非标准的。解析的Cookie始终是URI解码的(解码百分比(。这意味着如果您使用的名称或值包含以下任何字符:!#$%&'((*+/:<>[]^`{|}这些库将以不同的方式处理它们。如果您正在设置cookie,它们将使用%{HEX}进行编码。如果你在读饼干,你必须解码它们。

例如,当发送电子邮件时=name@domain.com是一个有效的cookie,这些库会将其编码为email=name%40domain.com。如果您在cookie中使用%,解码可能会出现问题。它会被弄坏的。例如,您的cookie原来是:secretagentlevel=50%007和50%006,现在变成secretagentlevel=507和506。这是一个边缘情况,但在切换库时需要注意。

此外,在这些库上,cookie设置为默认路径=/,这意味着它们在每个url请求时都会发送到主机。

如果您想自己对这些值进行编码或解码,可以分别使用encodeURIComponent或decodeURIComponent。

ShortFuse回答:使用Node.js HTTP服务器获取并设置单个Cookie

相关内容

最新更新