当在用户在浏览器地址栏中键入了一个Web站点的URL时,浏览器会向该Web站点发送一个读取网页的请求,并将结果在用户显示器上显示。这时该网页在用户计算机上寻找对应这个网站设置的Cookie文件,如果找到,浏览器会把Cookie文件中的数据连同前面输入的URL一同发送到该网站服务器。服务器收到Cookie数据,就会在它的数据库中检索客户端的ID、购物记录、个人喜好等信息,并记录下新的内容,增加到数据库和Cookie文件中。如果没有检索到Cookie或Cookie信息与数据库中的信息不符合,则说明客户端是第一次浏览该网站,服务器的CGI(Common GatewayInterface,公共网关接口)程序将为客户端创建新的ID信息,并保存到数据库中。下面给出Cookie的读写流程:
(1)浏览器对于Web服务器应答包头中Cookie的操作步骤:
A.从Web服务器的应答包头中提取所有的cookie。
B.解析这些cookie的组成部分(名称,值,路径等等)。
C.判定主机是否允许设置这些cookie。允许的话,则把这些cookie存储在本地。
(2)浏览器对Web服务器请求包头中所有的cookie进行筛选的步骤:
A.根据请求的url和本地存储cookie的属性,判断那些cookie能被发送给Web服务器。
B.对于多个cookie,判定发送的顺序。
C.把需要发送的cookie加入到请求http包头中一起发送。
通过以上Cookie的读写流程,我们发现Cookie是利用了网页代码中的HTTP头信息进行传递的,但是Cookie 是与Web站点而不是与具体页面关联的,所以无论用户请求浏览某个站点中的哪个页面,浏览器和服务器都将交换该站点中的Cookie信息,浏览器的每一次网页请求,都可伴随Cookie传递。例如:浏览器的打开或刷新网页操作,服务器将Cookie添加到网页的HTTP头信息中,伴随网页数据传回到客户端的浏览器,浏览器根据客户计算机中的Cookie设置来选择是否保存这些数据。如果浏览器不允许保存Cookie,则关掉浏览器后,这些数据就消失。用户访问其他站点时,每个站点都可能会向用户浏览器发送一个 Cookie,而浏览器也会对所有这些 Cookie 做出相应的处理。
具体工作过程描述如下:
(1)Web客户端通过浏览器向Web服务器发送连接请求,通过HTTP报文请求行中的URL打开某一Web页面。
(2)Web服务器接收到请求后,根据用户端提供的信息产生一个Set-Cookies Header。
(3)将生成的Set-Cookies Header通过Response Header存放在HTTP报文中回传给Web客户端,建立一次会话连接。
(4)Web客户端收到HTTP应答报文后,如果要继续已建立的这次会话,则将Cookies的内容从HTTP报文中取出,形成一个Cookies文本文件储存在客户端计算机的硬盘中或保存在客户端计算机的内存中。
(5)当Web客户端再次向Web服务器发送连接请求时,Web浏览器首先根据要访问站点的URL在本地计算机上寻找对应的Cookies文本文件或在本地计算机的内存中寻找对应的Cookies内容。如果找到,则将此Cookies内容存放在HTTP请求报文中发给Web服务器。
(6)Web服务器接收到包含Cookies内容的HTTP请求后,检索其Cookies中与用户有关的信息,并根据检索结果生成一个客户端所请求的页面应答传递给客户端。
此外,Cookie在客户端计算机上保存的时间是不一样的,这些都是由服务器的设置不同决定的,Cookie中有一个Expires(有效期)属性,这个属性决定了Cookie的保存时间,也可以重新设定来改变它,若不设置该属性,那么Cookie只在浏览网页期间有效,关闭浏览器后,这些Cookie会自动消失。绝大多数网站属于这种情况。通常情况下,Cookie包含Server、Expires、Name、value这几个字段,其中对服务器有用的只是Name和value字段,Expires等字段的内容仅仅是为了告诉浏览器如何处理这些Cookies。