HTTP cookie通常也叫作cookie,最初用于在客户端存储会话信息。 这个规范要求服务器在响应HTTP请求时,通过发送Set-Cookie HTTP头部包含会话信息。 浏览器会存储这些会话信息,并在之后的每个请求中都会通过HTTP头部cookie再将它们发回服务器。
25.1.1 限制cookie是与特定域绑定的。 设置cookie后,它会与请求一起发送到创建它的域。 这个限制能保证cookie中存储的信息只对被认可的接收者开放,不被其他域访问。 因为cookie存储在客户端机器上,所以为保证它不会被恶意利用,浏览器会施加限制。 同时,cookie也不会占用太多磁盘空间。 通常,只要遵守以下大致的限制,就不会在任何浏览器中碰到问题: ❑ 不超过300个cookie; ❑ 每个cookie不超过4096字节; ❑ 每个域不超过20个cookie; ❑ 每个域不超过81920字节。 如果cookie总数超过了单个域的上限,浏览器就会删除之前设置的cookie。
25.1.2 cookie的构成cookie在浏览器中是由以下参数构成的: ❑ 名称:唯一标识cookie的名称。最好将cookie名当成区分大小写 ❑ 值:存储在cookie里的字符串值。这个值必须经过URL编码。 ❑ 域:cookie有效的域。发送到这个域的所有请求都会包含对应的cookie。这个值可能包含子域(如),也可以不包含(如.wrox.com表示对wrox.com的所有子域都有效)。 ❑ 路径:请求URL中包含这个路径才会把cookie发送到服务器。 ❑ 过期时间:表示何时删除cookie的时间戳(即什么时间之后就不发送到服务器了)。默认,浏览器会话结束后会删除所有cookie。但也可设置删除cookie的时间。值是GMT格式(Wdy, DD-Mon-YYYY HH: MM: SS GMT)。把过期时间设置为过去的时间会立即删除cookie。 ❑ 安全标志:设置之后,只在使用SSL安全连接的情况下才会把cookie发送到服务器。

这个头部设置一个名为”name”的cookie,这个cookie在2007年1月22日7:10:24过期,对及其他wrox.com的子域(如p2p.wrox.com)有效。 安全标志secure是cookie中唯一的非名/值对,只需一个secure即可。

这里创建的cookie对所有wrox.com的子域及该域中的所有页面有效(通过path=/指定)。不过,这个cookie只能在SSL连接上发送,因为设置了secure标志。 域、路径、过期时间和secure标志用于告诉浏览器什么情况下应该在请求中包含cookie。这些参数并不会随请求发送给服务器,实际发送的只有cookie的名/值对。
25.1.3 JavaScript中的cookiedocument.cookie返回包含页面中所有有效cookie的字符串(根据域、路径、过期时间和安全设置),以分号分隔。名称和值是必需的。所有名和值都是URL编码的,因此必须使用decodeURIComponent()解码。
25.1.4 子cookie为绕过浏览器对每个域cookie数的限制,有些开发者提出了子cookie的概念。 如果实际开发中担心碰到每个域的cookie限制,则可以考虑使用子cookie这个方案。 此时要特别注意cookie的大小,不要超过对单个cookie大小的限制。 子cookie是在单个cookie存储的小块数据,本质上是使用cookie的值在单个cookie中存储多个名/值对。
25.1.5 使用cookie的注意事项还有一种叫作HTTP-only的cookie。 HTTP-only可以在浏览器设置,也可以在服务器设置,但只能在服务器上读取,这是因为JavaScript无法取得这种cookie的值。 因为所有cookie都会作为请求头部由浏览器发送给服务器,所以在cookie中保存大量信息可能会影响特定域浏览器请求的性能。 保存的cookie越大,请求完成的时间就越长。 即使浏览器对cookie大小有限制,最好还是尽可能只通过cookie保存必要信息,以避免性能问题。 对cookie的限制及其特性决定了cookie并不是存储大量数据的理想方式。 注:不要在cookie中存储重要或敏感的信息。cookie数据不是保存在安全的环境中,因此任何人都可能获得。应该避免把信用卡号或个人地址等信息保存在cookie中。 (责任编辑:admin) |