可以笼统的将cookie分为两类:会话cookie和持久cookie
会话cookie是一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被删除了。
持久cookie的生存时间更长一些,他们存储在磁盘上,浏览器退出,计算机重启时它们仍然存在。
会话cookie和持久cookie之间唯一的区别就是它们的过期时间。
稍后我们会看到,如果设置了Discard
参数,或者没有设置Expires
或Max-Age
参数来说明扩展的过期时间,这个cookie就是一个会话cookie。
用户首次访问Web站点时,Web服务器对用户一无所知。Web服务器希望这个用户会再次回来,所以想给这个用户“拍上”一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一个由“名字=值”这样的信息构成的任意列表,并通过Set-Cookie
或Set-Cookie2
HTTP响应首部将其贴到用户身上去。
HTTP响应:
HTTP/1.0 200 OK
Set-Cookie: a=1; path=/test/; domain=www.baidu.com
Set-Cookie: b=2; domain=.baidu.com
Set-Cookie: c=3; path=/
Content-type: text/html
Content-length: 1903
...
注:
每个cookie对应一条Set-Cookie
cookie中可以包含任意信息,但他们通常都只包含一个服务器为了进行跟踪而产生的独特的识别码。
浏览器会记住从服务器返回的Set-Cookie
或Set-Cookie2
首部中的cookie内容,并将cookie集存储在浏览器的cookie数据库中。将来用户返回同一站点,浏览器会挑中那个服务器贴到用户上的那些cookie,并在一个Cookie请求首部中讲其传回去。
再次请求:
GET / HTTP/1.0
Host: www.baidu.com
Cookie: b=2; c=3
注:
所有可用的cookie用一条Cookie返回
注:
(1)cookie0规范
cookie0规范定义了Set-Cookie
响应首部,Cookie请求首部以及用户控制cookie的字段。
Set-Cookie: name=value[; expires=date][; path=path][; domain=domain][; secure]
Cookie: name1=value1[; name2=value2]
(2)cookie的属性
cookie的域属性
产生cookie的服务器,可以向Set-Cookie
响应首部添加一个Domain
属性来控制哪些站点可以看到那个cookie。
例如:
Set-Cookie: user="mary17"; domain="air.com"
会告诉浏览器将user="mary17"
的cookie发送给域“.air.com
”。
即,Cookie: user="mary17"
cookie的路径属性
cookie规范甚至允许用户将cookie与部分Web站点关联起来。可以通过Path
属性来实现这一功能,在这个属性列出的URL路径前缀下所有的cookie都是有效的。