谁动了你的cookie

谁动了你的cookie

 

呵呵,标题只是为了好玩。

 

最近好几个人问我,cookie到底是什么,能不能用通俗的语言解释一下。他们只知道cookie的字面意思是小甜饼,似乎与安全隐私有关。至于cookie的具体用途,全然不知。这个小甜饼与网络如何扯上关系,似乎风马牛不相及的事情。

 

实际上,有些命名规则,是说不清道不明的,一定置身于作者所在的文化背景下,才能体会作者的深意。比如,Java为什么叫Javagoogle为什么叫googleapache为什么叫apache,如此等等,如果当事人不给点提示,我们是无法知道这些名字来历的。

 

抛开小甜饼还是小咸饼不谈,我们先解释一下cookie的功能吧。这要从HTTP协议说起,HTTP是一种无状态协议,即按HTTP协议本身要求,前后两次请求是没有依赖关系的,比如你先浏览哪个网页,再浏览哪个网页,HTTP协议本身是不作限制的。这也正常,协议只提供机制,而不提供策略,完全是情合理的。

 

问题在于现实不同于理想,在实际应用中,一些请求是有依赖关系的,最常见的信箱、论坛和博客等,只有登录成功后,才能使用它的全部功能。登录了,你才能收发邮件,才能发贴子,才能写博客。服务器就需要知道你是否登录了,这个信息就是状态,即登录状态。

 

这个矛盾如何解决呢?如何在无状态的协议上实际有状态的服务呢?得有一种方法才行,这种方法就是cookie,说白了,cookie就是WEB服务器保存客户端(即浏览器)中的状态信息,在后面请求中,浏览器会把这些信息回传给WEB服务器,WEB服务器通过这些cookie检查是否登录过了。当然cookie不限于保存登录信息,它只是一种技术手段,服务器想用它保存什么都行,看需要而定。

 

Cookie为什么会涉及到安全问题呢?这是显而易见的,虽然一般cookie都是经过加密处理过的,正如保险箱里的钱未必是保险的一样,加密后的信息未必不能被泄露。对于设计得不好的服务器程序来说,cookie可以直接被非法利用。

 

既然把cookie放在客户端(即浏览器)会有安全隐患,为什么不把这些状态放在服务器上呢?其实,这也是迫不得已的,这种做法从技术实现上考虑,没有丝毫困难。但是在现实中行不通,你想想,一个网站可能被数以千万的用户使用,有的状态信息可能要保存数月之久,这要保存多少信息!这种做法开销太大。

 

服务器在请求客户端(即浏览器)保存信息时,在下传的HTTP响应头中包含Set-Cookie字段,在客户端(即浏览器)回传信息给服务器时,在HTTP请求头中包含Cookie字段。

 

Cookie的格式为:

key1=value1;key2=value2; expires=...; domain=...; path=...; secure

l         key1=value1;key2=value2;代表服务器所要保存的有效数据。

l         expires表示cookie的生命期,过期之后就无效了,比如有的网站要求你过一段时间后重新登录,就是通过它来实现的。

l         Domainpath表示cookie的作用范围,即在哪些网网页上有效。

l         Secure表示该cookie是不是只适用于HTTPS的请求。

 

下面是一个例子:

telnet www.google.com 80

HEAD /intl/zh-CN/ HTTP/1.1

Host: www.google.com

 

 

HTTP/1.1 200 OK

Cache-Control: private

Content-Type: text/html

Set-Cookie:PREF=ID=2595b468a53b7221:NW=1:TM=1145015023:LM=1145015023:S=iASetSIzh8_sHPue; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com

Server: GWS/2.1

Content-Length: 0

Date: Fri, 14 Apr 2006 11:43:43 GMT

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值