Jquery-cookie: 在 cookie 值上使用 encodeURIComponent() 应该是 escape()

创建于 2011-01-20  ·  5评论  ·  资料来源: carhartl/jquery-cookie

此处 encodeURIComponent() 是否正确用于转义 cookie 的值? 不应该是“逃避”吗?

Cookie 进出您的插件就好了,但是由于您选择的编码,包含路径名的 cookie 并不能真正被其他任何人使用。

最有用的评论

如果其他人像我一样在寻找答案时发现了这个讨论:

Cookie 作为 HTTP 标头传递给服务器:

Cookie:名称1=值1; 名称2=值2

显然, value1 不允许包含 ;

还有其他有问题的角色。

事实是 cookie 从根本上受到缺乏编码的阻碍。 您必须选择一种编码并在浏览器和服务器上使用它。

MDN 推荐 encodeURIComponent: https :

所有5条评论

使用encodeURIComponent / decodeURIComponentescape / unescape弃用

除此之外,我还没有理解这里的问题是什么。 cookie 值在返回之前通过 decodeURIComponent 运行; 因此,除非我遗漏了一些东西,否则它应该与传入 cookie 时的完全相同。 您能否发布一个要点或其他内容来说明问题?

最后,您可以首先使用raw选项绕过编码。

你是对的,它被弃用了。 可能 encodeURI() 是真正需要的,而不是 encodeURIComponent()。

简而言之,这是一个问题:您的代码仅在通过您的插件创建和使用 cookie 时才有效。 如果您使用插件创建 cookie,然后尝试从 php 或 java 应用程序读取它,则该应用程序必须知道 cookie 是使用 encodeURIComponent() 编码的,并且应该在后端使用 urldecoded()。

这导致问题的主要地方是当您将 URL 或 URI 放入 cookie 时。 假设我想在 cookie 中放入“/foo”。 EncodeURIComponent() 为我提供了不可用的路径名“%2Ffoo”,而 encodeURI() 为我提供了“/foo”,任何后端系统或其他任何人在没有插件的情况下使用 cookie 都可以直接使用它。

此处 encode() 的优点实际上是,如果您的 cookie 值中有分号,它会被转义。 encodeURI() 不会转义分号,因此您必须在使用 encodeURI() 的基础上添加一些代码来处理它。

Raw 还可以,但我假设您可能添加了它,因为人们对编码有疑问。 如果您使用 encodeURI(),那么您可能不再需要它了。

我不能使用encodeURI

encodeURI('foo;bar') == "foo;bar"

但:

encodeURIComponent('foo;bar') == "foo%3Bbar"

后者是我们想要的行为。

raw实际上是为了在服务器上玩得开心而添加的。

我很好奇你为什么想要这种行为? 努力在别处找到答案http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

如果其他人像我一样在寻找答案时发现了这个讨论:

Cookie 作为 HTTP 标头传递给服务器:

Cookie:名称1=值1; 名称2=值2

显然, value1 不允许包含 ;

还有其他有问题的角色。

事实是 cookie 从根本上受到缺乏编码的阻碍。 您必须选择一种编码并在浏览器和服务器上使用它。

MDN 推荐 encodeURIComponent: https :

此页面是否有帮助?
0 / 5 - 0 等级