索阅100例 首 页| 资 讯| 下 载| 论 坛| 博 客| Webinar| 高 校| 专 刊| 会展| EETV| 百科| 问答| 电路图| 工程师手册| Datasheet

EEPW首页>百科> Cookie

Cookie


贡献者:DXY701121浏览:1526次 创建时间:2009-09-09

Cookie是一个由服务器存储在客户机系统上的小文件,它包含在未来与服务器的会话中要使用的数据。Cookie主要用在Web上,虽然它在任何基于Web的客户机/服务器环境中都很有用。下一次客户机与服务器连接时,服务器将读取Cookie中的信息。这样一来,就使服务器“记住”客户机和关于客户机的信息。Cookie在同一会话中的连接期间或对未来会话基本上维持客户机和服务器之间的“状态”。
假设在用户请求访问您的网站www.contoso.com上的某个页面时,您的应用程序发送给该用户的不仅仅是一个页面,还有一个包含日期和时间的Cookie。用户的浏览器在获得页面的同时还得到了这个Cookie,并且将它保存在用户硬盘上的某个文件夹中。
以后,如果该用户再次访问您站点上的页面,当该用户输入URL www.contoso.com时,浏览器就会在本地硬盘上查找与该URL相关联的 Cookie。如果该 Cookie 存在,浏览器就将它与页面请求一起发送到您的站点,您的应用程序就能确定该用户上一次访问站点的日期和时间。您可以根据这些信息向用户发送一条消息,也可以检查过期时间或执行其他有用的功能。又比如,当用户在某个Web站点上填写一份表格时,可能有些信息就存储在用户计算机上的Cookie中以备将来使用。当用户下一次访问时,Web服务器读取该Cookie以了解用户的姓名和其他将在当前会话中使用的与用户有关的信息。
Cookie是与Web站点而不是与具体页面关联的,所以无论用户请求浏览站点中的哪个页面,浏览器和服务器都将交换www.contoso.com的Cookie信息。用户访问其他站点时,每个站点都可能会向用户浏览器发送一个Cookie,而浏览器会将所有这些Cookie分别保存。
Cookie允许电子商务站点保存客户的信息,如登录信息和客户ID。这样以来,Cookie提供了一种单签约形式,即Web服务器从用户Cookie获取登录信息而不再询问用户。当然,保密和安全问题涉及到Cookie(一个cookie变坏,全部Cookie受殃及?)。例如,Cookie可以跟踪用户访问的Web站点并将信息传送到Web服务器上,以备人数统计目的使用。该信息可能还用于基于访问过的Web站点类型显示符合用户喜好的广告。有些黑客攻击也使用Cookie进行。
几乎所有的Web站点都尝试在客户机系统上放置Cookie。典型的客户机任何时候都可能在系统上存储有几百甚至几千Cookie。大多数Web浏览器具有控制Cookie的功能,用户可以选择拒绝所有Cookie或在存储Cookie前询问,但是设置了这些选项会很麻烦,因为不断有消息弹出或者Web站点拒绝与浏览器合作。例如,为了测试,某人有一次在自己的Web浏览器上设置了“保存Cookie前询问”,然后访问一个流行的Web站点。很短的时间内,在屏幕上弹出了40多个“询问″消息。
要理解创建Cookie的原因,需要理解状态的概念。最初Web是无状态的(并且除了Cookie等附件和有些新协议外现在仍旧是无状态的)。无状态意味着两个系统间的连接匿名执行,且服务器不保留可能再次使用的关于客户机和连接的信息。无状态也意味着连接不保持开放状态以等待进一步的请求。Cookie提供了一种在HTTP协议中创建状态的方法。
Cookie由服务器上的CGI脚本处理。当用户连接到使用Cookie的服务器时,服务器脚本让用户的Web浏览器接受并保存Cookie信息。Web浏览器将Cookie放在一个特殊的位置(cookie桶?)以备将来引用。下次访问Web站点时,Cookie信息就可以为Web服务器使用了。
Netscape是第一个使用Cookie并开发Cookie建议的浏览器,但是RFC 2109最终定义了一个可互操作标准。RFC在HTTP协议中定义了两个头:Cookie和Set-Cookie。连接过程按如下所述使用Cookie:
l.客户机与服务器联系。
2.服务器使用Set-Cookie头选项响应客户机。
3.客户机返回一个Cookie请求头(假设它接受Cookie)。
Set-Cookie头包含下列信息:
?名称 由服务器确定的cookie名称。
?注释 一个可选值,其中包含服务器打算如何使用Cookie的有关信息。用户可以检查该信息以确定是否想接受Cookie.
?域 一个可选值,其中包括发放Cookie的服务器名。
?最长寿命 以秒为单位定义Cookie寿命的值。Cookie在其寿命结束时被丢弃。对于寿命值为0的Cookie,读取它后会立即丢弃它。
?路径 指定Cookie应用到的URL子集。
?安全 指定应该在安全连接上使用Cookie,以在传输期间隐藏Cookie的内容。
?版本 指定Cookie的版本,其中1等于RFC 2109。
大多数浏览器支持最多可达4096字节的Cookie,如果要将为数不多的几个值保存到用户计算机上,这一空间已经足够大,但您不能用一个Cookie来保存数据集或其他大量数据。在实际应用中,您可能并不希望在Cookie中保存大量的用户信息,而只希望保存用户编号或其他标识符。之后,当用户再次访问您的站点时,您就可以使用该用户 ID 在数据库中查找用户的详细信息。
浏览器还限制了您的站点可以在用户计算机上保存的 Cookie 数。大多数浏览器只允许每个站点保存20个Cookie。如果试图保存更多的Cookie,则最先保存的Cookie就会被删除。还有些浏览器会对来自所有站点的Cookie总数作出限制,这个限制通常为300 个。
您最可能遇到的 Cookie 限制是:用户可以设置自己的浏览器,拒绝接受Cookie。您很难解决这个问题,除非完全不使用 Cookie 而是通过其他机制来保存用户相关信息。保存用户信息的一种常用方法是会话状态,但会话状态又依赖于 Cookie。拒绝服务攻击是可能的。在攻击中,服务器会使用大量Cookie或大型Cookie将客户机充满,假定有Cookie限制且首先丢弃最早的Cookie,则这会挤出用户系统上的其他Cookie.因此,应该对来自任何一台服务器的可接受Cookie数量设置上限。
在RFC中还讨论了可能的欺骗攻击以及隐私问题,如用户跟踪Cookie以得知它是否正在收集有关自己访问站点的信息的能力。有一个称为Cookie切割的相对新的技术,用以在交换机中(特别是Web交换机中)区分通信的优先次序。该技术让Web站点将一些客户指定为高级用户,将它们的传入数据分组转发到更高性能的服务器上。



如果您认为本词条还有待完善,需要补充新内容或修改错误内容, 请编辑词条 查看历史版本

开放分类

参考资料

贡献者


本词条在以下词条中被提及:

关于本词条的评论共:(0条)
匿名不能发帖!请先 [ 登陆]