js-cookie的编码值与php setcookie的编码不同

时间:2019-06-01 18:11:54

标签: encoding setcookie js-cookie

当我使用此https://github.com/js-cookie/js-cookie

创建cookie时

这是我的隐窝变量的内容。

s192aBszcV7NPrR8KpQbl4u/hkOOmMBzPg2mAhGlZB1/nAcus=0


然后使用js-cookie设置cookie。.

Cookies.set('_siteauth',crypt, {
   expires: 1,
   path: '/'
});

这是js设置的cookie值...

s192aBszcV7NPrR8KpQbl4u/hkOOmMBzPg2mAhGlZB1/nAcus=0


因此,如果我使用php setcookie设置相同的变量。

setcookie('_siteauth', $crypt, time() + 86400, '/');

cookie的值是这个。

s192aBszcV7NPrR8KpQbl4u%2FhkOOmMBzPg2mAhGlZB1%2FnAcus%3D

我期望cookie值应该是哪个。编码。


但是js-cookie的有关编码的文档说的是https://github.com/js-cookie/js-cookie#encoding,令我惊讶的是,所设置的js-cookie的值根本没有被编码。

请问有人可以对此进行说明吗?还是我缺少js-cookie插件?

1 个答案:

答案 0 :(得分:0)

正如js-cookie documentation所说:

  

该项目符合RFC 6265。 cookie名称或cookie值中不允许的所有特殊字符都使用percent-encoding用每个人的UTF-8十六进制等效符号进行编码。

     

[...]

     

请注意,默认的编码/解码策略应可互操作only between cookies that are read/written by js-cookie 。要覆盖默认的编码/解码策略,您需要使用converter

(强调我的。)

根据RFC 6265,cookie值可以包含集合!#$%&'()*+-./:<=>?@[]^_`{|}~中的任何字符以及数字(0-9)和字母(a-zA-Z)。

请注意,/=都是cookie值中的有效字符。

此外,未指定编码或转义机制:

  

此文档未定义cookie值的语义。

     

为了最大程度地与用户代理兼容,服务器希望   将任意数据存储在cookie值中应对该数据进行编码,   例如,使用Base64 [RFC4648]。

对cookie值使用百分比编码是不规范的。毫不奇怪,不同的库为cookie值提供了不同的编码方案。特别是,js-cookie并非设计为与任何编码方案兼容,而是与之兼容。