早期Web开发面临的最大问题之一是如何管理状态。服务器端没有办法知道两个请求是否来自于同一个浏览器。那时的办法是在请求的页面中插入一个token,并且在下一次请求中将这个token返回(至服务器)。这就需要在form中插入一个包含token的隐藏表单域,或着在URL的qurey字符串中传递该token。这两种办法都强调手工操作并且极易出错。
cookies工作原理的基本信息在RFC2109中被规范化
HTTP cookies,通常又称作"cookies"
一个cookie就是存储在用户主机浏览器中的一小段文本文件。
Cookies是纯文本形式,它们不包含任何可执行代码。
一个Web页面或服务器告之浏览器来将这些信息存储并且基于一系列规则在之后的每个请求中都将该信息返回至服务器。Web服务器之后可以利用这些信息来标识用户。
通过HTTP的Set-Cookie消息头,Web服务器可以指定存储一个cookie。
Set-Cookie消息的格式如下面的字符串(中括号中的部分都是可选的)
Set-Cookie:value [ ;expires=date][ ;domain=domain][ ;path=path][ ;secure]
value部分,通常是一个name=value格式的字符串。事实上有很多浏览器用自己的格式,有细微的不同。
当一个cookie存在,并且可选条件允许的话,该cookie的值会在接下来的每个请求中被发送至服务器。
cookie的值被存储在名为Cookie的HTTP消息头中,并且只包含了cookie的值,其它的选项全部被去除。
可选项只是存在于浏览器端,并不需要发给服务端。
例如: Cookie : value
如果在指定的请求中有多个cookies,那么它们会被分号和空格分开,例如:
Cookie:value1 ; value2 ; name1=value1
有效期选项(The expires option)
指定了cookie过期的时间,过期后可能会被浏览器删掉。
格式为Wdy,DD-Mon--YYYY HH:MM:SS GMT,例如:
Set-Cookie:name=Nicholas;expires=Sat, 02 May 2009 23:38:25 GMT
在没有expires选项时,cookie的寿命仅限于单一的会话中。浏览器的关闭意味这一次会话的结束,所以会话cookie只存在于浏览器保持打开的状态之下。
网友评论