Cookie

本页使用了标题或全文手工转换,现处于马来西亚简体模式
求闻百科,共笔求闻

小甜饼”(Cookies,复数形态:Cookies),指由站点服务器生成,为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),当用户访问服务器时,又由本地终端被发送给服务器以便通信。Cookie技术由网景公司的前雇员卢·蒙特利在1993年3月发明。最初定义于RFC 2109,历经RFC 2965,至现在的RFC 6265。目前使用最广泛的Cookie标准却不是RFC中定义的任何一个,而是在网景公司制定的标准上进行扩展后的产物。

分类

Cookie保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。

内存 Cookie 由浏览器维护,保存在内存中,浏览器关闭即消失,存在时间短暂。硬盘Cookie保存在硬盘里,有过期时间,除非用户手工清理或到了过期时间,硬盘Cookie不会清除,存在时间较长。所以,按存在时间,可分为非持久Cookie和持久Cookie。

用途

因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookie中包含的信息,借此维护用户跟服务器会话中的状态。

在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie即可。

Cookie另一个典型的应用是当登录一个站点时,站点往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一站点时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的Cookie到用户的硬盘上。第二次登录时,如果该Cookie尚未到期,浏览器会发送该Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。

Cookie的缺陷

  1. Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  2. 由于HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非使用超文本传输安全协定
  3. Cookie的大小限制在4 KB左右,对于复杂的存储需求来说是不够用的。[1]

使用Cookie

ttugvgggğj 用户可以改变浏览器的设置,以使用Cookie。同时一些浏览器自带或安装开发者工具包允许用户查看、修改或删除特定站点的Cookie信息。

识别功能

如果在一台电脑中安装多个浏览器,每个浏览器都会以独立的空间存放Cookie。因为Cookie不但可确认用户信息,还包含电脑和浏览器的信息,所以一个用户使用不同的浏览器登录或者用不同的电脑登录,都会得到不同的Cookie信息,另一方面,对于在同一台电脑上使用同一浏览器的多用户群,Cookie不会区分他们的身份,除非他们使用不同的用户名登录。

反对Cookie者

一些人反对Cookie在网络中的应用,他们的理由如下:

识别不精确

如果在同一台机器上使用多个浏览器,每个浏览器在不同的存储位置保存Cookie,因此,Cookie并不能定位到一个具体的人,而是用户、电脑和浏览器的组合。

不准确的状态

如果用户在获取了一个Cookie之后,点击了浏览器的“回退”按键,则浏览器的状态和获取Cookie的状态就出现了不一致。例如,如果站点基于Cookie技术实现了购物车的应用,当用户添加了物品后点击了“回退”按键,购物车的物品状态可能并没有发生变化。

隐私、安全和广告

Cookie在某种程度上说已经严重危及用户的隐私安全。其中的一种方法是:一些公司的高层人员为了某种目的(譬如市场调研)而访问了从未去过的站点(通过搜索引擎查到的),而这些站点包含了一种叫做网页臭虫的图片,该图片透明,且只有一个像素大小(以便隐藏),它们的作用是将所有访问过此页面的电脑写入Cookie。而后,电子商务站点将读取这些Cookie信息,并寻找写入这些Cookie的站点,随即发送包含了针对这个站点的相关产品广告的垃圾邮件给这些高级人员。

偷窃Cookie和脚本攻击

虽然Cookie没有中电脑病毒那么危险,但它仍包含了一些敏感讯息:用户名、电脑名、使用的浏览器和曾经访问的站点。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。

这并非危言耸听,跨站点脚本Cross site scripting)可以达到此目的。在受到跨站点脚本攻击时,Cookie盗贼和Cookie投毒将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。

  • Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie讯息通过合法手段进入用户帐户。
  • Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物站点的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。

Cookie的替代品

鉴于Cookie的局限和反对者的声音,有如下一些替代方法:

  • Brownie方案,是一项开放原始码工程,由SourceForge发起。Brownie曾被用以共享在不同域中的接入,而Cookie则被构想成单一域中的接入。这项方案已经停止开发。
  • P3P,用以让用户获得更多控制个人隐私权利的协议。在浏览站点时,它类似于Cookie。这项方案也已经停止开发。
  • 在与服务器传输数据时,通过在地址后面添加唯一查询串,让服务器识别是否合法用户,也可以避免使用Cookie。

引用

  1. Mark Pilgrim. HTML5: Up and Running. O’Reilly. 2010. ISBN 978-0596806026.