个性化接触
用户识别机制:
- 承载用户身份信息的HTTP首部
- 客户端IP地址跟踪,通过用户的IP地址对其进行识别
- 用户登陆,用认证方式来识别用户
- 胖 URL,一种在URL中嵌入识别信息的技术
- cookie 一种功能强大且高效的持久身份识别技术
cookie 类型
可以笼统的将 cookie 分为两类:会话 cookie 和持久 cookie。会话 cookie 是一种临时 cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就被踢出了。持久cookie的生存时间更长一些;它们存储的硬盘上,浏览器退出,计算机重启时它们仍然存在。通常会用持久cookie维护某个用户会周期性访问的站点的配置文件或登录名。
cookie是如何工作的
用户首次访问Web站点时,Web服务器对用户一无所知。Web服务器希望这个用户会再次回来,所以想给这个用户"拍上"一个独有的cookie,这样以后它就可以识别出这个用户了。cookie中包含了一个由名字=值(name=value)这样的信息构成的任意列表,并通过 Set-Cookie或 Set-Cookie2 HTTP响应(扩展)首部将其贴到用户身上去。
cookie中可以包含任意信息,但它们通常都只包含一个服务器为了进行跟踪而产生的独特的识别码。比如,在上图中,服务器会将一个表示 id="34294"的cookie贴到用户上去。服务器可以用这个数字来查找服务器为其访问者积累的数据库信息(购物历史,地址信息等)。但是,cookie并不仅限于ID号。很多Web服务器都会将信息直接保存在cookie中。比如:
Cookie:name="Brian Totty"; phone="555-1212"
浏览器会记住从服务器返回的Set-Cookie或Set-Cookie2首部中的cookie内容,并将cookie集存储在浏览器的cookie数据库中(把它当作一个贴有不同国家贴纸的旅行箱)。将来用户返回同一站点时,浏览器会挑中那个服务器贴到用户上的那些cookie,并在一个cookie请求首部中将其传回去。
cookie 存储
cookie的基本思想就是让浏览器积累一组服务器特有的信息,每次访问服务器时都会将这些信息提供给它。因为浏览器要负责存储cookie信息,所以此系统被称为客户端侧状态。这个 cookie规范的正式名称为"HTTP 状态管理机制"。
不同的浏览器会以不同的方式来存储cookie。网景的Navigator 会将cookie存储在一个名为 cookie.txt的文本文件中。
文本文件的每一行都代表一个cookie,有7个用tab键分隔的字段
- domain (域)
cookie的域 - allh
是域名所有的主机都获取cookie,还是只有指定了名字的主机获取 - path(路径)
域中与cookie相关的路径前缀 - secure(安全)
是否只有在使用SSL连接时才发送这个cookie - expiration(过期)
从格林标准时间1970年1月1日00:00:00开始的cookie过期秒数 - name (名字)
cookie变量的名字 - value(值)
cookie变量的值
不同的站点使用不同的cookie
浏览器内置的cookie可以有成千上百个,但浏览器不会将每个cookie都发送给所有的站点。实际上,它们通常只向每个站点发送2~3个cookie。原因如下:
- 对所有这些 cookie字节进行传输会严重降低性能。浏览器实际传输的cookie字节数要比实际的内容字节数多
- cookie中包含的是服务器持有的键值对,所以对大部分站点来说,大多数cookie都只是无法识的无用数据
- 将所有的cookie发送给所有站点会引发潜在的隐私问题,那些你并不信任的站点也会获得你只想发给其他站点的信息。
总之,浏览器只向服务器发送服务器产生的那些cookie,joes-hardware.com产生的cookie会被发送给joes-hardware.com,不会发送给bobs-books.com或marys-movies.com.
cookie 的域属性
产生cookie的服务器可以向 Set-Cookie响应首部添加一个 Domain 属性来控制哪些站点可以看到那个cookie。比如,下面的HTTP响应首部就是在告诉浏览器将 cookie user="mary17"发送给域".airtravelbargains.com"中的所有站点:
Set-Cookie:user="mary17"; domain="airtravelbargains.com"
如果用户访问的是www.airtravelbargains.com,specials.airtravelbargains.com或任意以.airtravelbargains.com结尾的站点,下列 Cookie首部都会被发布出去:
Cookie:user="mary17"
cookie 的路径属性
cookie规范甚至允许用户将cookie与部分Web站点关联起来。可以通过Path属性来实现这一功能,在这个属性列出的 URL路径前缀下所有 cookie都是有效的。
cookie成分
现在使用的cookie规范有两个不同的版本:cookie版本0(有时被称为Netscape cokies)和版本1(RFC 2965)。cookie版本1时对cookie版本0的扩展,应用不如后者广泛。
cookie规范版本0和版本1都不是作为HTTP/1.1规范的一部分提供的,下图对两个主要附属文档进行了总结,这两个文档对 cookie的使用进行了很好的描述:
cookie版本0
版本0的cookie看起来如下所示:
Set-Cookie:name=value [; expires=date] [; path=path] [; domain=domain] [; secure]
Cookie: name1=value1 [; name2=values] ...
版本0的cookie首部
- NAME=VALUE
强制的,NAME 和 VALUE 都是字符序列,除非包含在双引号内,否则不包括分号,逗号,等号和空格。Web服务器可以创建任意的 NAME=VALUE 关联,在 Set-Cookie: customer=Mary - Expires
可选的,过期时间 - Domain
浏览器只向指定域中的服务器主机发送cookie。这样服务器就将 cookie限制在了特定的域中。 - Path
可选的。通过这个属性可以为服务器上特定的文档分配cookie - Secure
可选的。如果包含了这一属性,就只有在HTTP使用SSL安全连接时才会发送cookie;
Set-Cookie: private_id=519; secure
cookies 版本1
定义了一个cookie扩展版本。这个版本1标准引入了 Set-Cookie2首部和Cookie2首部,但它也能与版本0系统进行互操作。
- 为每个 cookie关联上解释性文本,对其目的进行解释
- 允许在浏览器退出时,不考虑过期时间,将cookie强制销毁
- 用相对秒数,而不是绝对日期来表示 cookie的 Max-Age
- 通过URL端口号,而不仅仅是域和路径来控制 cookie的能力
- 通过 Cookie首部回送域,端口和路径过滤器(如果有的话)
- 为实现互操作性使用的版本号
- 在 Cookie 首部从名字中区分出附加关键字的$前缀
cookie与会话跟踪
可以用cookie在用户与某个Web站点进行多项事务处理时对用户进行跟踪。电子商务Web站点用会话cookie在用户浏览时记录下用户的购物车信息。我们以流行的购物网站 Amazon.com为例。在浏览器中输入http://www.amazon.com时,就启动了一个事务链,在这些事务中Web服务器会通过一些列的重定向,URL重写以及cookie设置来附加标识信息。
1.浏览器首次请求 Amazon.com根页面
2.服务器将客户端重定向到一个电子商务软件的URL上
3.客户端对重定向的URL发起一个请求
4.服务器在响应上贴和那个两个会话cookie,并将用户重定向到另外一个URL,这样客户端就会用这些附加的 cookie再次发出请求。这个新的URL是个fat URL,也就是说有些状态嵌入到URL中去了。如果客户端禁止了cookie,只要用户一致跟随者 Amazon.com 产生的 fat URL链接,不离开网站,仍然可以实现一些基本的标识功能。
5.客户端请求新的URL,但现在会传送两个附加的 cookie
6.服务器重定向到home.html页面,并附加另外两个cookie
7.客户端获取 home.html页面并将所有四个cookie都发送出去
8.服务器回送内容
cookie 安全与隐私
cookie是可以禁止的,而且可以通过日志分析或其他方式来实现大部分跟踪记录,所以cookie自身并不是很大的安全隐患。实际上,可以通过提供一个标准的审查方法在远程数据库中保存个人信息,并将匿名cookie作为键值,来降低客户端到服务器的敏感数据传送频率。
但是,潜在的滥用情况总是存在的,所以,在处理隐私和用户跟踪信息时,最好还是要小心一些。第三方Web站点使用持久cookie来跟踪用户就是一种最大的滥用。将这种做法与IP地址和Referer首部信息结合在一起,这些营销公司就可以构建起相当精确的用户档案和浏览模式信息。
cookie 存在的问题
cookie 是Web服务器用来识别Web用户的小块数据。关于 cookie 功能额度流行的说法和谣言之间的比例已经达到了令人不解的地址,使用户恐惧,使管理者忧心。
脆弱性评估
由于使用Web浏览器 cookie 使得系统被破坏或者窃听,从而带来的系统错弱性本质上并不存在。cookie只能告知Web服务器你以前是否到过某个网站,并在下次访问时将来自Web服务器的一些短小信息(比如用户编码)回送给它。大部分cookie只会持续到用户退出浏览器为止,然后就会被破坏掉。第二种名为持久cookie的cookie有一个过期日期,在你的硬盘上到那个日期为止。无论用户何时返回一个站点,都可以通过持久cookie来识别其身份,以便跟踪用户的浏览习惯。你来自何处,以及访问过哪些Web页面等信息已经存储在Web服务器的日志文件中了,也可以用这些信息来跟踪用户的浏览习惯,只是使用 cookie更简单一些罢了。