Cookie是我们浏览网络时随时伴随着我们的东西,可以经常看到很多安全软件在帮你清理系统时都会提示你要清除cookie,那么你对cookie又了解多少呢?今天就主要对相关知识作了整理学习。

1、什么是cookie?有什么作用?

Cookie是数据包,不是程序,可以简单的理解为网页的一个记忆功能,网站服务器把少量的数据存储在客户端的一种技术,主要是为了方面用户。详细点说就是是你浏览某网站时,由Web服 务器置于你硬盘上的一个非常小的文本文件,记录着你的一些个人信息,例如:用户ID、密码、浏览过的网页、停留的时间等信息。当用户再次来到该网站时,网 站通过读取Cookie,得知相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让用户不用输入ID、密码就直接登录等等。

举例来说cookies到底有哪些优点呢?

1) 保存用户登录状态:例如将用户id存储于一个cookie内,这样当用户下次访问该页时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个月、一年等。

2) 跟踪用户行为:例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便。

3) 定制页面:如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。

4)  创建购物车:正如在前面的例子中使用cookie来记录用户需要购买的商品一样,在结账的时候可以统一提交。例如淘宝网就使用cookie记录了用户曾经浏览过的商品,方便随时进行比较。

从 前面的了解可以知道,网站利用cookie可能存在侵犯用户隐私的问题,但由于大多用户对此了解不多,而且这种对用户个人信息的利用多数作为统计数据之 用,不一定造成用户的直接损失,因此现在对于cookies与用户隐私权的问题并没有相关法律约束,很多网站仍然在利用cookie跟踪用户行为,有些程 序要求用户必须开启cookie才能正常应用。 

2、为什么会有cookie,cookie是如何实现的?

 http 协议的是一个无状态的连接协议,即客户端的请求和服务端的响应是相对独立的。但是客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的 特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接 状态的技术就应运而生了,一个是Cookie,而另一个则是Session。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。


3、Cookies文件保存在哪里,如何设置cookies?

不同系统下,cookies存储的位置有不同,Windows xp下,cookies保存在C:\Documents and Settings \Cookies,windows vista下则记录在C:\Users\用户名\Cookies\;保存格式是以user@domain格式命名 的,user是本地用户名,domain是所访问的网站的域名,我们可对Cookie进行适当设置:打开“工具/Internet选项”中的“隐私”选项卡(注意该设置只在IE6.0中存在,其他版本IE可以单击“工具 /Internet选项” “安全”标签中的“自定义级别”按钮,进行简单调整),调整Cookie的安全级别。通常情况,可以调整到“中高”或者“高” 的位置。多数的论坛站点需要使用Cookie信息,如果你从来不去这些地方,可以将安全级调到“阻止所有Cookies”;如果只是为了禁止个别网站的 Cookie,可以单击“编辑”按钮,将要屏蔽的网站添加到列表中。在“高级”按钮选项中,你可以对第一方Cookie和第三方的Cookie进行设置, 第一方Cookie是你正在浏览的网站的Cookie,第三方Cookie是非正在浏览的网站发给你的Cookie,通常要对第三方Cookie选择“拒绝”。你如果需要保存Cookie,可以使用IE的“导入导出”功能,打开“文件/导入导出”,按提示操作即可。 

4、如何读取和写入cookies?

了解到客户端脚本javascript和vbscript也是可以读取和写入cookies,所以下面将通过使用javascript来学习。

这里我将以一个例子来实现产生cookie和读取cookie。

1) 写入cookie

Cookie存储在document对象的cookie属性中,这个属性是一个字符串,当页面载入时由浏览器自动生成。在cookie属性中,信息由分号隔开,每一个cookie都包含了一对由等号分开的名字和值。

这里记入的cookies为:测试数据及有效时间为1分钟。



1 function Set(){
2     var Then = new Date()        
3     Then.setTime(Then.getTime() + 60*1000 )   //60秒
4     document.cookie = "Cookie1=测试数据;expires="+ Then.toGMTString() 
5 }

 

2)读取cookie

除非能再次访问cookie,否则没必要写入cookie。浏览器会自动用在当前域范围内有效的cookie来填充document.cookie,所以, 根本没有机会读取那些不该被读取的cookie值。不过,仍然可以读取在其他时间设置的cookie值,也可以在同一个网站的其他位置读取cookie 值。

从document.cookie中读取数据没有特别的地方,就是需要解析字符串,并取出所需要的值。不过只要理解了cookie字符串的语法,就可以很容易地将这个过程分解为一系列的函数调用。

01 function Get(){  
02      var cookieString = new String(document.cookie)
03      var cookieHeader = "Cookie1="
04      var beginPosition = cookieString.indexOf(cookieHeader)
05      if (beginPosition != -1){
06          document.all.Textbox.value = cookieString.substring(beginPosition 
07              + cookieHeader.length) 
08          }
09      else
10          document.all.Textbox.value = "Cookie 未找到!"   
11 }

     以下是整个实现代码,保存为html,运行你即可发现你的cookies文件夹生成了一条cookie,一分钟之内如果读取将会读取出先前写入的cookie内容。

01 <HTML>
02 <BODY>
03 写入与读取 cookies...<BR>
04 <INPUT TYPE = BUTTON Value = "写入cookie" onClick = "Set()">
05 <INPUT TYPE = BUTTON Value = "读取cookie" onClick = "Get()"><BR>
06 <INPUT TYPE = TEXT NAME = Textbox>
07 </BODY>
08 <SCRIPT LANGUAGE="JavaScript">
09 function Set(){
10    var Then = new Date()        
11    Then.setTime(Then.getTime() + 60*1000 )   //60秒
12    document.cookie = "Cookie1=测试数据;expires="+ Then.toGMTString() 
13 }
14 function Get(){  
15     var cookieString = new String(document.cookie)
16     var cookieHeader = "Cookie1="
17     var beginPosition = cookieString.indexOf(cookieHeader)
18     if (beginPosition != -1){
19        document.all.Textbox.value = cookieString.substring(beginPosition+ cookieHeader.length) 
20         }
21     else
22        document.all.Textbox.value = "Cookie 未找到!"   
23 }
24 </SCRIPT> 
25 </HTML>

     其实要在服务端和客户端灵活的运用好cookie机制还是不那么容易的事情,首先就涉及到服务端的sesssion机制 ,关于session机制我还不了解,下一篇将要学习这方面的知识。


 by vivilisa