添加的内容 删除的内容
小 (机器人:删除1个模板:Wayback) |
小 (机器人:修正重定向) |
||
(未显示2个用户的7个中间版本) | |||
第1行: | 第1行: | ||
{{Otheruses|subject=电脑网络技术'''HTTP Cookies'''|other=同名的其它 |
{{Otheruses|subject=电脑网络技术'''HTTP Cookies'''|other=同名的其它条目描述|Cookies(消歧义)}} |
||
{{noteTA |
{{noteTA |
||
|G1=IT |
|G1=IT |
||
|1=zh-hans:数据; zh-tw: |
|1=zh-hans:数据; zh-tw:资料; |
||
|2=zh-hans:窗口; zh-tw: |
|2=zh-hans:窗口; zh-tw:视窗; |
||
|3=zh-hans:站点; zh-tw: |
|3=zh-hans:站点; zh-tw:网站; |
||
|4=zh-hans:偷窃; zh-tw:竊取; |
|4=zh-hans:偷窃; zh-tw:竊取; |
||
|5=zh-hans:接入; zh-tw:存取; |
|5=zh-hans:接入; zh-tw:存取; |
||
|6=zh-hans:用户本地终端; zh-tw:用 |
|6=zh-hans:用户本地终端; zh-tw:用户端; |
||
|7=zh-hans:手工; zh-tw:手 |
|7=zh-hans:手工; zh-tw:手动; |
||
|8=zh-hans:调研 |
|8=zh-hans:调研 |
||
}} |
}} |
||
{{HTTP}} |
{{HTTP}} |
||
“'''小甜餅'''”('''Cookies''',复数形态:Cookies),指由网站服务器生成,为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过[[加密]]),当用户访问服务器时,又由本地终端被发送给服务器以便通信。Cookie技术由[[网景公司]]的前雇员[[卢·蒙特利]]在1993年3月发明<!-- removed_ref site196 by WaitSpring-bot (template) -->。最初定义于RFC 2109,历经RFC 2965,至现在的RFC 6265。目前使用最广泛的Cookie标准却不是[[RFC]]中定义的任何一个,而是在[[网景公司]]制定的标准上进行扩展后的产物。 |
|||
== 分类 == |
== 分类 == |
||
Cookie保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。 |
Cookie保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。 |
||
内存 Cookie 由[[浏览器]]维护,保存在[[内存]]中,浏览器关闭即消失,存在时间短暂。硬盘Cookie保存在[[硬盘]] |
内存 Cookie 由[[网页浏览器|浏览器]]维护,保存在[[随机存取存储器|内存]]中,浏览器关闭即消失,存在时间短暂。硬盘Cookie保存在[[硬盘]]里,有过期时间,除非用户手动清理或到了过期时间,硬盘Cookie不会清除,存在时间较长。所以,按存在时间,可分为非持久Cookie和持久Cookie。 |
||
== 用途 == |
== 用途 == |
||
因为[[ |
因为[[超文本传输协议|HTTP协议]]是无状态的,即[[服务器]]不知道用户上一次做了什么,这严重阻碍了[[交互式Web应用程序]]的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两瓶饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookie中包含的信息,借此维护用户跟服务器[[会话(计算机科学)|会话]]中的状态。 |
||
在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie即可。 |
在刚才的购物场景中,当用户选购了第一项商品,服务器在向用户发送网页的同时,还发送了一段Cookie,记录着那项商品的信息。当用户访问另一个页面,浏览器会把Cookie发送给服务器,于是服务器知道他之前选购了什么。用户继续选购饮料,服务器就在原来那段Cookie里追加新的商品信息。结帐时,服务器读取发送来的Cookie即可。 |
||
第28行: | 第28行: | ||
== Cookie的缺陷 == |
== Cookie的缺陷 == |
||
# Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。 |
# Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。 |
||
# 由于HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非使用[[超文本传输安全协定]]。 |
# 由于HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非使用[[超文本传输安全协议|超文本传输安全协定]]。 |
||
# Cookie的大小限制在4 KB左右,对于复杂的存储需求来说是不够用的。<ref>{{cite book | title=HTML5: Up and Running | |
# Cookie的大小限制在4 KB左右,对于复杂的存储需求来说是不够用的。<ref>{{cite book | title=HTML5: Up and Running | | publisher=O’Reilly | author=Mark Pilgrim | year=2010 | isbn=978-0596806026}}</ref> |
||
== 使用Cookie == |
== 使用Cookie == |
||
第48行: | 第48行: | ||
=== 不准确的状态 === |
=== 不准确的状态 === |
||
如果用户在取得了一个Cookie之后,点击了浏览器的 |
如果用户在取得了一个Cookie之后,点击了浏览器的“回退”按键,则浏览器的状态和取得Cookie的状态就出现了不一致。例如,如果网站基于Cookie技术实现了购物车的应用,当用户添加了物品后点击了“回退”按键,购物车的物品状态可能并没有发生变化。 |
||
=== 隐私、安全和广告 === |
=== 隐私、安全和广告 === |
||
第56行: | 第56行: | ||
== 偷窃Cookie和脚本攻击 == |
== 偷窃Cookie和脚本攻击 == |
||
虽然Cookie没有中电脑病毒那么危险,但它仍包含了一些敏感讯息:用户名、电脑名、使用的浏览器和曾经访问的网站。用户不希望这些内容泄漏出去,尤其是当其中还包含有私人信息的时候。 |
|||
这并非危言耸听,[[跨 |
这并非危言耸听,[[跨网站指令碼]]('''Cross site scripting''')可以达到此目的。在受到跨网站指令碼攻击时,Cookie盗贼和Cookie投毒将窃取内容。一旦Cookie落入攻击者手中,它将会重现其价值。 |
||
* Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie |
* Cookie盗贼:搜集用户Cookie并发给攻击者的黑客,攻击者将利用Cookie讯息通过合法手段进入用户帐户。 |
||
* Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。 |
* Cookie投毒:一般认为,Cookie在储存和传回服务器期间没有被修改过,而攻击者会在Cookie送回服务器之前对其进行修改,达到自己的目的。例如,在一个购物网站的Cookie中包含了顾客应付的款项,攻击者将该值改小,达到少付款的目的。 |
||
第66行: | 第66行: | ||
鉴于Cookie的局限和反对者的声音,有如下一些替代方法: |
鉴于Cookie的局限和反对者的声音,有如下一些替代方法: |
||
* [http://sourceforge.net/projects/brownie Brownie方案],是一项[[开放源代码]]工程,由[[SourceForge]]发起。Brownie曾被用以共享在不同域中的接入,而Cookie则被构想成单一域中的接入。这项方案已经停止开发。 |
* [http://sourceforge.net/projects/brownie Brownie方案],是一项[[开放源代码]]工程,由[[SourceForge]]发起。Brownie曾被用以共享在不同域中的接入,而Cookie则被构想成单一域中的接入。这项方案已经停止开发。 |
||
* [[P3P]],用以让用户获得更多控制个人隐私权利的[[网络传输协议|协议]]。在浏览网站时,它类似于Cookie。这项方案也已经停止开发。 |
* [[隱私權偏好平台|P3P]],用以让用户获得更多控制个人隐私权利的[[网络传输协议|协议]]。在浏览网站时,它类似于Cookie。这项方案也已经停止开发。 |
||
* 在与服务器传输数据时,通过在地址后面添加唯一[[查询串]],让服务器识别是否合法用户,也可以避免使用Cookie。 |
* 在与服务器传输数据时,通过在地址后面添加唯一[[查询串]],让服务器识别是否合法用户,也可以避免使用Cookie。 |
||