Rails编码的cookie与JavaScript decodeURIComponent不兼容

Nic*_*ilt 5 javascript jquery rack ruby-on-rails

jquery.cookie使用decodeURIComponent检索值. https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js#L89

Rails通过调用存储cookie

@set_cookies.each { |k, v| ::Rack::Utils.set_cookie_header!(headers, k, v) 
if write_cookie?(v) }
Run Code Online (Sandbox Code Playgroud)

如您所见,rack util用空格替换空格.

https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L18

如果我使用Javascript的encodeURIComponent,则'hello world'的编码值为

"你好%20world"

但是rails将cookie值存储为

"你好+世界"

谁是对的?

我在哪里可以看到关于存储cookie值的规范说明.

asc*_*99c 2

不确定这个问题是否已被放弃,但最近我自己也遇到了类似的问题。

Cookie 在 RFC2109 中定义:http ://www.ietf.org/rfc/rfc2109.txt 该标准参考 RFC2068 的一些定义或特殊字符等:http ://www.ietf.org/rfc/rfc2068.txt

据我所知,它仅定义您不能在 cookie 值中使用保留字符。它似乎没有定义您必须使用的编码方案。也就是说,只要你坚持不懈地做,任何一个都可以。

在您的 jQuery cookie 代码中,您可以指定“raw”选项,该选项不会执行decodeURIComponent 的操作,从而允许您按照您喜欢的方式对其进行解码。