Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于cookies的编码方案_Cookies_Browser_Unicode - Fatal编程技术网

用于cookies的编码方案

用于cookies的编码方案,cookies,browser,unicode,Cookies,Browser,Unicode,指定允许每个cookie至少4096字节 现在,为了知道每个cookie允许的字符数,我需要知道cookie使用的字符编码,因为RFC以字节而不是字符来指定每个cookie的最大大小 我如何知道用于存储cookie的编码 它是由用于创建cookie的编程语言(例如PHP、JavaScript)使用的字符编码决定的,还是由存储cookie的浏览器使用的字符编码决定的 更新: 我进行了一些测试,FF、Chrome和Opera似乎在使用UTF-8存储cookie,编码显然会影响cookie中可以存储的

指定允许每个cookie至少4096字节

现在,为了知道每个cookie允许的字符数,我需要知道cookie使用的字符编码,因为RFC以字节而不是字符来指定每个cookie的最大大小

我如何知道用于存储cookie的编码

它是由用于创建cookie的编程语言(例如PHP、JavaScript)使用的字符编码决定的,还是由存储cookie的浏览器使用的字符编码决定的

更新: 我进行了一些测试,FF、Chrome和Opera似乎在使用UTF-8存储cookie,编码显然会影响cookie中可以存储的字符数。cookie中允许的最大字符数将受到用于在客户端上存储cookie的字符编码的影响


我怀疑浏览器使用UTF-8作为Cookie的字符编码,我使用了单字节UTF-8字符(
1
),双字节UTF-8字符(
),3字节UTF-8字符(
),以及一个4字节UTF-8字符(
似乎更多地由程序员(在浏览器后面)决定,而不是由编程语言决定。通常Cookie值是URL编码的,但没有任何要求。

看一看,完成你的研究(添加Safari特例)。可能也有帮助。

无论浏览器内部如何存储Cookie,它们最终都必须在
设置Cookie
Cookie
HTTP头字段中传输。RFC的作者最可能想到的是这些字段的编码长度。至少在大多数RFC中是这样因此,“cookie的大小”取决于它在HTTP头中的编码方式

根据,请求头字段应为

组成字段值的八位字节,由*文本或标记、分隔符和带引号字符串的组合组成

其中*文本依次为:

可能包含非ISO字符集的字符- 8859-1[22]仅当根据RFC 2047的规则进行编码时

定义了所谓的“MIME编码”,在我看来,它有一些有趣的规则。也就是说,根据它的规则,为了对外来字符集进行编码,您必须使用“引用的可打印”格式:
=?UTF-8?Q?=48=65=6c=6c=6f?=
,或者使用“Base64格式:
=?UTF-8?B?SGVsbG8=?=
。(请注意,这里的两个示例都对单词“Hello”进行编码。第一个使用27个字节,第二个使用20个字节,但是这不包括cookie名称和属性)

此外,根据RFC2047,您的“编码字”长度可能不会超过76个字符,因此,如果我理解正确,则较长的cookie值必须编码为一组76字节的片段,每个片段以
=?UTF-8?Q?=
mumbo jumbo开头

我测试了如果我通过Apache使用PHP设置一个非ASCII(俄语)cookie会发生什么情况。生成的
set cookie
头没有字符集规范,使用URL编码,长度超过76字节(对于标准来说就这么多了,对吧?)

CookieName=%D0%92+%D0…%B0%D0%B9;过期时间=周四,2014年9月11日19:59:18 GMT;路径=/tmp/;域=.some.domain

与176个字符的句子相对应的cookie值(带属性)的总长度为923字节

总而言之,我认为你的问题无法得到严格的答案,但这仍然是一个有趣的问题