Cookie的组成

Cookie的组成

下面讲解一下Cookie的组成,对HTTP不太熟悉的读者可以暂时跳过这段,等到阅读和运行一些代码后,就会有直观的理解。
Cookie在HTTP的头部Header信息中,HTTP Set-Cookie的Header格式如下:

Set-Cookie: name=value; [expires=date]; [path=path];
[domain=domainname]; [secure];

下面是在HTTP代码中一个具体的例子:

<meta http-equiv="set-cookie" content=" cookieName = cookieValue;
expires=01-Dec-2006 01:14:26 GMT; path=/" />

从上面的格式可以看出,Cookie由下面几部分组成。

(1) Name/Value对

其格式如下:

cookieName=cookieValue

Name/Value由分号分隔。一个Cookie最多有20对,每个网页最多有一个Cookie,Value的长度不超过4K。对于Value值,最好用encodeURIComponent对其编码。

(2) Domain

Domain域名也是Cookie的一部分,默认情况下,用户访问网页的域名会存放在Cookie中。如果设置了这个Cookie的域名值,那么意味着域名上的所有服务器,而不仅是你正在访问的服务器,都能访问这个Cookie,通常不要这样做。设置域名的格式如下:

domain=http://xyz.com

(3) path

path设置对于特定的服务器来说哪个目录中的网页可访问Cookie。设置path的格式是:

path = /movies

(4) Expires

设置Cookie存活的时间,默认情况下,用户关闭浏览器则Cookie自动删除,如果没有设置Cookie失效的时间,那么用户关闭浏览器时Cookie也消失。如果设置该项,就能延长Cookie的生命期。设置时间在JavaScript中用Date对象的GMT形式,格式如下:

expires = date.toGMTString()

其中date是一个Date对象。

在Java中,可以用Java API设置。

如果Cookie的时间早于目前的时间,就删除Cookie。读者在一些网站上,可能会发现网站询问你保存登录信息多长时间(当天、3个月等),很可能就是通过设置该项来实现的。

(5) Secure

取true或者false值。如果为true,那么必须通过https发送Cookie。


另篇,Cookie的格式要素及其定义:


 Cookie由变量名和值组成,类似Javascript变量。其属性里既有标准的Cookie变量,也有用户自己创建的变量,属性中变量是用“变量=值”形式来保存。
  根据Netscape公司的规定,Cookie格式如下:

  Set-Cookie: NAME=VALUE;Expires=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE NAME=VALUE:

  这是每一个Cookie均必须有的部分。NAME是该Cookie的名称,VALUE是该Cookie的值。在字符串“NAME=VALUE”中,不含分号、逗号和空格等字符。
  Expires=DATE:Expires变量是一个只写变量,它确定了Cookie有效终止日期。该属性值DATE必须以特定的格式来书写:星期几,DD-MM-YY HH:MM:SS GMT,GMT表示这是格林尼治时间。反之,不以这样的格式来书写,系统将无法识别。该变量可省,如果缺省时,则Cookie的属性值不会保存在用户的硬盘中,而仅仅保存在内存当中,Cookie文件将随着浏览器的关闭而自动消失。
  Domain=DOMAIN-NAME:Domain该变量是一个只写变量,它确定了哪些Internet域中的Web服务器可读取浏览器所存取的Cookie,即只有来自这个域的页面才可以使用Cookie中的信息。这项设置是可选的,如果缺省时,设置Cookie的属性值为该Web服务器的域名。
  Path=PATH:Path属性定义了Web服务器上哪些路径下的页面可获取服务器设置的Cookie。一般如果用户输入的URL中的路径部分从第一个字符开始包含Path属性所定义的字符串,浏览器就认为通过检查。如果Path属性的值为“/”,则Web服务器上所有的WWW资源均可读取该Cookie。同样该项设置是可选的,如果缺省时,则Path的属性值为Web服务器传给浏览器的资源的路径名。
  可以看出我们借助对Domain和Path两个变量的设置,即可有效地控制Cookie文件被访问的范围。
  Secure:在Cookie中标记该变量,表明只有当浏览器和Web Server之间的通信协议为加密认证协议时,浏览器才向服务器提交相应的Cookie。当前这种协议只有一种,即为HTTPS。 

           Cookies以键值的方式记录会话跟踪的内容.服务器利用响应报头Set-Cookie来发送COOKIE信息.在RFC2109中定义的SET-COOKIE响应报头的格式为:
Set-Cookie: Name = Value; Comment = value; Domain = value; Max-Age = value; Path = Value;
Secure; Version = 1 * DIGIT;

Name是Cookie的名字,Value是它的值.Name=Value属性值对必须首先出现,在此之后的属性-值对可以以任何顺序出现. 在Servlet规范中,用于会话跟踪的cookie的名字必须是JSESSIONID。
Comment属性是可选的,因为Cookie可能包含其它有关用户私有的信息.这个属性允许服务器说明这个Cookie的使用,用户可以检查这个消息,然后决定是否加入或继续会话。
Domain属性也是可选的.它用来指定Cookie在哪一个域中有效.所指定的域必须以点号(.)来开始。
Max-Age属性是可选的,用于定义Cookie的生存时间,以秒为单位.如果超过了这个时间,客户端就应该丢弃这个cookie.如果指定的秒数为0,表示这个cookie应立即被丢弃。
Path属性是可选的,用于指定这个cookie在哪一个URL子集下有效。
Secure属性是必需的,它的值是一个十进制数,标识cookie依照的状态管理规范的版本。
例如:
set-cookie: uid = Linda; Max-Age=3600; Domain=.sun.org; Path=/bbs; Version=1
它表示一个名为uid,值为Linda的cookie.生存时间为3600秒,在sunxin.org域的 bbs路径下有效.在3600秒后,客户端将抛弃这个cookie. 当IE收到上面这个响应报头后,可以选择接受或拒绝这个cookie.如果ID接受了这个cookie,当浏览器下一次发送请求到
hxxp://www.xxx.com/bbs路径下的资源时,同时也会发送以下的请求报头:
cookie:uid=zhangsan.

猜你喜欢

转载自wezly.iteye.com/blog/853681