因特网的Cookie技术极其简单,却有着旺盛的生命力。Cookie开始引起众人的注意是从2000年二月份随着网络隐私权的提出开始的,有关的辩论至今仍在继续。从另一方面来说,Cookie使得浏览网页更容易了。几乎所有的主要的网站设计者都使用了Cookie,因为他们想为浏览网站的人提供一个更好的浏览环境,同时也能更加准确地收集访客的信息。
有家颇有影响的报纸上曾刊登了一篇很有深度的关于网络隐私的文章,上面对于Cookie的定义是这样的:
“Cookie是Web网站放在您的硬盘上的程序。它守在您的电脑里,搜集您的信息以及您在因特网上所做的任何事情,当Web站点需要的时候它能够下载所有这些搜集到的信息。”
像这样的定义在报刊中相当普遍。问题是,它的定义犯了很大的错误。Cookie不是程序,而且它不能像程序一样地运行,所以它无法为自己搜集任何信息。它也不能从您的电脑上取得您的任何个人资料。
Cookie的比较确切的定义应该是这个样子:
“Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片断以‘名/值’对(name-value pairs)的形式储存。”
举例来说,一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。
如果您使用IE浏览器访问Web,您会看到所有保存在您的硬盘上的Cookie。它们最常存放的地方是:C:/Documents and Settings/Administrator/Cookies。在我的机器上共有165个文件。每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的Web站点的信息。
在这个文件夹里的每个Cookie文件都是一个简单而又普通的文本文件。透过文件名,您可以看到是哪个Web站点在您的机器上放置了Cookie(当然站点信息在文件里也有保存)。您也能双击打开每一个Cookie文件。
比如,我访问了goto.com,而且这个站点在我的电脑上放了个Cookie。goto.com的Cookie文件包含了这样的内容:
goto.com在我的电脑上存入了一个单一的“名/值”对。“名/值”对的“名”是UserID,“值”是A 9A3BECE0563982D。在我第一次访问goto.com的时候,该网站为我分配了一个唯一的ID并存在我的电脑里。
(注:除了上面举例的“名/值”对,可能会有其它的“名/值”对同时保存下来。那是浏览器的一些内部信息,一般用户不必多做了解。)
Amazon.com在我的电脑上保存了稍稍多一些的信息。当我查看Amazon在我的电脑上建立的Cookie文件时,它包含以下内容:
session-id-time 954242000 amazon.com/
session-id 002-4135256-7625846 amazon.com/
x-main eKQIfwnxuF7qtmX52x6VWAXh@Ih6Uo5H amazon.com/
ubid-main 077-9263437-9645324 amazon.com/
以上内容显示出Amazon存储了一个主用户ID ubid-main,一个标记每次任务的ID session-id及任务发生的时间session-id-time。还有一个x-main,不知道是什么。
大多数的网站在您的电脑上只保存一条信息,即用户ID。但一个站点可以用Cookie存储的“名/值”对的最大数目没有任何限制。
一个“名/值”对仅仅是一条命名的数据,它不是程序,也不能“做”任何事情。一个网站只能取得它放在您的电脑中的信息,它无法从其它的Cookie文件中取得信息,也无法得到您的电脑上的其它任何东西。
Cookie数据仅仅是Web站点在浏览者硬盘上存储的“名/值”数据对。这就是Cookie的所有内容。Web站点保存了数据,随后又把它取回。一个Web站点只能取得它保存在你电脑上的内容,无法偷窥别的Cookie,更不要说电脑上其他的数据。
Cookie数据的流动过程如下:
·如果在浏览器上键入了一个Web站点的URL,浏览器向Web站点请求读取网页。比如,您输入了:http://www.amazon.com
浏览器将从Amazon的服务器读取它的主页。
·在做上面工作的同时,浏览器将从电脑上寻找Amazon网站设置的Cookie文件。如果找到了Amazon的Cookie文件,浏览器会把文件中的所有“名/值”对同先前的URL一同发给Amazon服务器。如果没有找到,就不发送Cookie数据。
·Amazon服务器接收Cookie数据和对网页的请求。如果存在“名/值”对,Amazon将使用它。
·如果没有收到“名/值”对,Amazon知道您在此之前没有访问过它的站点,服务器会为您创建一个新的ID放进Amazon的数据库中,然后把“名/值”对放在传回的网页的头信息里传给您。您的浏览器将在硬盘上保存“名/值”对。
·每当您再次访问网站时,网站服务器会改变“名/值”对或增加新的“名/值”对。
另外,服务器会随着“名/值”对发送一些其他信息。其一是生存期(Expiration date);还有一个是路径(网站借此把不同的Cookie值与不同的网站部位关联起来)。
您有权控制这个过程。您可以设置一个选项让浏览器在收到网站发来的“名/值”对时提醒您,由您决定是否接受。
Cookie实践篇
Cookie解决了网站建设人员的一个大难题,它允许一个网站在您的机器上保存网站相关信息,从而网站可以记住浏览器上一次所处的状态。用户ID是一种简单的状态信息——如果您的电脑上有ID存在,网站会知道您此前访问过它。
Web网站利用Cookie的方式各不相同。下面是几个最为常见的例子:
1.网站能够精确地知道有多少人浏览过。
由于代理服务器、缓存等的使用,唯一能帮助网站精确统计来访人数的方法就是为每个访问者建立一个唯一的ID。使用Cookie,网站可以完成以下工作:
●测定多少人访问过;
●测定访问者有多少是新用户(即第一次来访),多少是老用户;
●测定一个用户多久访问一次网站。
网站使用数据库达到上述目标。当一个用户第一次访问时,网站在数据库中建立一个新的ID,并把ID通过Cookie传送给用户。用户再次来访时,网站把该用户ID对应的计数器加1,得到用户的来访次数。
2.网站保存用户的设置,按照用户的喜好定制网页外观。
例如,假如你访问 msn.com,它为你提供了改变网页内容、布局和颜色的能力,允许你输入自己的邮政编码,为你提供特定的天气预报。输入邮政编码后,MSN的Cookie文件中将加入这样的“名/值”对:
WEAT CC=NC%5FRaleigh%2DDurham?ION= www.msn.com/
(本例中,邮编是Raleigh, NC)
大多数网站只在Cookie里保存用户ID,而在网站数据库中存储用户设置参数。当然在“名/值”对里保存这些参数也是一种办法(稍后我们将讨论后一种方法有什么不妥)。
3.电子商务站点能够实现一些像“购物篮”、“快速结账”之类的东西。
Cookie里面包含了一个ID,当你往购物篮中放了新东西时网站即能记录下来。你放进购物篮里的每一件东西保存在网站的数据库里的对应着你的ID的记录。当你“买单”时,网站通过检索数据库中你的所有选择就能知道你的购物篮里有些什么。假如没有Cookie或类似的机制,上面的工作将很难完成。
在所有的示例中,网站的数据库能够保存的有你所选择的内容、你浏览过的网页、你在表单里填写的信息等。所有这些信息保存在站点的数据库中。多数情况下,包含有你的唯一ID的Cookie保存在你的电脑里。
下面的实例用来演示Cookie和数据库的组合能够做些什么。我们来借助howcookieworks.com网站(一个假设网站)的服务器来讲述工作过程:
在你第一次访问 http://www.howcookieworks.com 时,服务器为你创建了一个唯一ID并在你的电脑上保存了一个包含有该ID的Cookie文件。举例来说,在我现在使用的电脑上,我所看到的cookie文件的内容是:
user 35005 www.howcookieworks.com/
数字35005并没有什么稀奇——它仅仅是一个整数,它每次随着访客的到来而增加。我是自网站建立以来的第35005个用户。用户的ID可以被设计得很精细,许多网站使用超过20位数字的ID。
现在,无论何时访问这个网站上的任何网页,浏览器会把包含有你的ID的Cookie发回服务器。然后服务器在数据库中保存一条记录,包括你的ID、网页的URL以及下载网页的时间。
了解cookie和cookie的安全性
一、什么是cookie?
打开你的Documents and Settings文件夹,进去以后,随便打开一个用户来看看,是不是有一个文件夹叫“Cookies”,里面装着一堆.txt文件?那么,这个Cookies到底是个什么东东呢?
Cookie的英文原意是“甜饼”,但这里所讲的“Cookie”可不是糕点哦,它只是一个保存在客户机中的简单的文本文件,这个文件与特定的Web文档关联在一起,保存了该客户机访问这个Web文档时的信息,当客户机再次访问这个Web文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性,因此它可以帮助我们实现记录用户个人信息的功能,而这一切都不必使用复杂的CGI等程序。是不是很有意思?
二、Cookie的功能
1.定制个性化空间
用户访问一个站点,可能由于费用、带宽限制等原因,并不希望浏览网页所有的内容。Cookie可根据个人喜好进行栏目设定,即时、动态地产生用户所要的内容,这就迎合了不同层次用户的访问兴趣,减少用户项目选择的次数,更合理利用网页服务器的传输带宽。
2.记录站点轨迹
由于Cookie可以保存在用户机上,并在用户再次访问该Server时读回这一特性可以帮助我们实现很多设计功能,如显示用户访问该网页的次数;显示用户上一次的访问时间;甚至是记录用户以前在本页中所做的选择等等,这可免去我们再去研究复杂的CGI编程。
三、Cookie的组成
类似Javascript变量,Cookie由变量名和值组成。其属性里既有标准的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。
四、cookie的安全性
上面我们说到的全都是cookie对我们的好处,但是实际上好象偷偷的被人放了东西在自己的硬盘里(而且还有很多人是在并不知道的情况下)毕竟感觉不是很舒服,尤其是这个文件还可以被远程的服务器长期的监控,修改,记录一些你冲浪的习惯甚至你的相关密码.....这个这个,虽然有一定的便利可图,但是始终感觉不对味....当然,如果遇到一个很正规的大网站当然不用怕,但是要知道世界上还是有很多黑客网站的哦!所以呢——你自己看着办拉,我只是提供这些信息而已,呵呵。
最后就是如果你觉得还是对cookie这种东东加以限制的好呢,下面有几种方法,你可以参考参考哦!
如果你用的浏览器是IE4:就右件点击Internet Exploer—>属性—>安全—>自定义级别—>选中“禁止所有Cookie使用”这个复选项就可以了;
如果你用的是IE5,哪就比较麻烦了,因为IE5还有本地、可信站点、受限站点等等级别之分,没办法,你就一个个的设吧。
上面的办法都比较麻烦,有没有什么简单点的办法呢?呵呵,其实你只要把刚刚咱们说的cookies文件夹设为“只读”不就完了吗?
不过最后还有些cookie不是放在你能看到的地方,而是放在注册表中的(一说到注册表我头就大了),哪就运行regedit,打开
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/ CurrentVersion/ InternetSettings / Cache/Special Paths/Cookies
删除其中所有的文件,OK拉,最后再用查找功能一个个的把“Cookies”找出来,一一删除就行拉!