10 Cookie介绍
HTTP是一种无状态性的协议。这是因为此种协议不要求浏览器在每次请求中标明它自己的身份,并且浏览器以及服务器之间并没有保持一个持久性的连接用于多个页面之间的访问。
当用户访问http://example.com这个域名的时候,浏览器就会自动和服务器建立TCP/IP连接,然后发送HTTP请求到example.com的服务器的80端口。该个请求的语法如下所示:
GET/ HTTP/1.1
Host:example.org
在这个请求例子中,没有任何信息可以唯一标识当前这个发出请求的客户端。保持应用程序状态的第一步就是要知道如何来唯一地标识每个客户端。因为只有在HTTP中请求中携带的信息才能用来标识客户端,所以在请求中必须包含某种可以用来标识客户端唯一身份的信息。
Cookie是作为HTTP一个扩展诞生的,其主要用途是弥补HTTP的无状态特性,提供了一种保持客户端与服务器端之间状态的途径,Cookie机制采用的是在客户端保持状态的方案。
有两个HTTP头部是专门负责设置以及发送Cookie的,它们分别是Set-Cookie以及Cookie。当服务器返回给客户端一个http响应信息时,其中如果包含Set-Cookie这个头部时,意思就是指示客户端建立一个cookie,并且在后续的HTTP请求中自动发送这个Cookie到服务器端,直到这个cookie过期。如果Cookie的生存时间是整个会话期间的话,那么客户端会将cookie保存在内存中,客户端关闭时就会自动清除这个Cookie。另外一种情况就是保存在客户端的硬盘中,客户端关闭的话,该Cookie也不会被清除,下次打开客户端访问对应网站时,这个Cookie就会自动再次发送到服务器端。
Cookie有一个Expires(有效期)属性,这个属性决定了Cookie在客户端的保存时间,服务器可以通过设定Expires字段的数值,来改变Cookie的保存时间。
通常情况下,Cookie包含Server、Expires、Name、value这几个字段,其中对服务器有用的只是Name和value字段,Expires等字段的内容仅仅是为了告诉客户端如何处理这些Cookie。Cookie使用的名称和值也可以由自己定义。
一个Cookie的设置以及发送过程分为以下四步:
客户端发送一个HTTP请求到服务器端
服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie头部
客户端发送一个HTTP请求到服务器端,其中包含Cookie头部
服务器端发送一个HTTP响应到客户端
在客户端的第二次请求中包含的Cookie头部中,提供给了服务器端可以用来唯一标识客户端身份的信息。这时,服务器端也就可以判断客户端是否启用了Cookie。