Cookie
Cookie(复数形態:Cookies),又稱「小甜餅」。類型為「小型文字檔案」[1],指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。由网景公司的前雇员盧·蒙特利在1993年3月發明[2]。最初定義於RFC 2109。目前使用最广泛的Cookie标准却不是RFC 中定义的任何一个,而是在网景公司制定的标准上进行扩展后的产物。
HTTP/HTTPS |
---|
版本 |
请求方法 |
报文主体 |
頭欄位 |
狀態碼 |
相关主题 |
分类
Cookie 保存在客户端中,按在客户端中的存储位置,可分为内存 Cookie 和硬盘 Cookie。
内存 Cookie 由浏览器维护,保存在内存中,浏览器关闭即消失,存在时间短暂。硬盘 Cookie 保存在硬盘裡,有过期时间,除非用户手动清理或到了过期时间,硬盘 Cookie 不会清除,存在时间较长。所以,按存在时间,可分为非持久 Cookie 和持久 Cookie。
用途
因为 HTTP 协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式 Web 应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于 HTTP 的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以 Cookie 就是用来绕开 HTTP 的无状态性的“额外手段”之一。服务器可以设置或读取 Cookies 中包含的信息,借此维护用户跟服务器会话中的状态。
在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段 Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把 Cookie 发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段 Cookie 里追加新的商品信息。结帐时,服务器读取发送来的 Cookie 即可。
Cookie 另一个典型的应用是当登录一个网站时,网站往往会请求用户输入用户名和密码,并且用户可以勾选“下次自动登录”。如果勾选了,那么下次访问同一网站时,用户会发现没输入用户名和密码就已经登录了。这正是因为前一次登录时,服务器发送了包含登录凭据(用户名加密码的某种加密形式)的 Cookie 到用户的硬盘上。第二次登录时,如果该 Cookie 尚未到期,浏览器会发送该 Cookie,服务器验证凭据,于是不必输入用户名和密码就让用户登录了。
Cookie 的缺陷
使用 Cookie
用户可以改变浏览器的设置,以使用 Cookie。同时一些浏览器自带或安装开发者工具包允许用户查看、修改或删除特定网站的 Cookie 信息。
识别功能
如果在一台计算机中安装多个浏览器,每个浏览器都会以独立的空间存放 Cookie。因为 Cookie 不但可确认用户信息,还包含计算机和浏览器的信息,所以一个用户使用不同的浏览器登录或者用不同的计算机登录,都会得到不同的 Cookie 信息,另一方面,对于在同一台计算机上使用同一浏览器的多用户群,Cookie 不会区分他们的身份,除非他们使用不同的用户名登录。
反对 Cookie 者
一些人反对 Cookie 在网络中的应用,他们的理由如下:
识别不精确
如果在同一台机器上使用多个浏览器,每个浏览器在不同的存储位置保存 Cookie,因此,Cookie 并不能定位到一个具体的人,而是用户、计算机和浏览器的组合。
不准确的状态
如果用户在取得了一个 Cookie 之后,点击了浏览器的「回退」按键,则浏览器的状态和取得 Cookie 的状态就出现了不一致。例如,如果网站基于 Cookie 技术实现了购物车的应用,当用户添加了物品后点击了「回退」按键,购物车的物品状态可能并没有发生变化。
偷窃Cookies和脚本攻击
雖然Cookies没有中電腦病毒那么危险,但它仍包含了一些敏感訊息:用户名、電腦名、使用的浏览器和曾经访问的网站。用户不希望这些内容洩漏出去,尤其是当其中还包含有私人信息的时候。
这并非危言耸听,跨網站指令碼(Cross site scripting)可以达到此目的。在受到跨網站指令碼攻击时,Cookie盗贼和Cookie投毒将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。
- Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie訊息通过合法手段进入用户帐户。
- Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。
Cookies的替代品
鉴于Cookie的局限和反对者的声音,有如下一些替代方法: