一、用户识别机制
1.1 承载用户信息的HTTP首部
首部名称 | 首部类型 | 备注 |
From | 请求 | 用户的E-mail地址,该首部是由机器人或蜘蛛发送的,浏览器很少发送该信息,以防服务器随意收集发送垃圾邮件 |
User-Agent | 请求 | 用户的浏览器软件 |
Referer | 请求 | 用户是从哪个页面依照链接跳转过来的 |
Authorization | 扩展请求 | 用户名和密码 |
Client-IP | 扩展请求 | 客户端的IP地址,通常在HTTP首部并不提供,但web服务器可以找到承载HTTP请求的TCP连接另一端的IP地址 |
X-Forearded-For | 扩展请求 | 客户端的IP地址 |
cookie | 扩展请求 | 服务器产生的ID标签,通常只向每个站点发送2~3个cookie,避免降低性能以及传送过多无用数据,总之,浏览器只向服务器发送服务器产生的那些cookie |
1.1.1 User-Agent
1.1.2 Referer
1.2 客户端IP地址跟踪,通过用户的IP地址对其进行识别
客户端IP地址并能识别用户,原因在于客户端ip描述的是机器而不是用户,存在着多个用户共用一台机器的情况;其次,很多因特网服务商为用户登陆时动态分配IP,同时,为了提高安全性,并对稀缺的地址资源进行管理,很多用户都是通过网络地址转换;最后,服务器获取的通常都是代理服务器的IP,而不是客户端的。
1.3 用户登录,用认证方式来识别用户
为了使Web站点的登录简易,HTTP包含了一种内建机制。可以用www-Authenticate和Authorization首部向Web站点传送用户的相关信息。这就意味着向站点发送请求时,头部必须含有相关信息,若是不同站点的,则不断需要用户输入登录名和密码(毕竟不同站点的用户名和密码很大程度上不同)。
1.4 胖URL,一种在URL中嵌入识别信息的技术
改动后包含了用户状态信息的URL被称为胖URL。
1.5 cookie,一种功能强大且高效的持久身份识别技术
cookie是当前识别用户,实现持久会话的最好方式。cookie的存在影响了缓存,大多数缓存和浏览器都不允许对任何cookie的内容进行缓存。cookie分为两类:会话cookie和持久cookie。
1.5.1 cookie罐:客户端的状态
cookie的基本思想:让浏览器积累一组服务器特有的信息,每次访问服务器都将这些信息提供给它。由于浏览器要负责存储cookie信息,因此此系统被称为客户端侧状态。这个cookie规范的正式名为HTTP状态管理机制。
1)cookie的域属性
产生cookie的服务器可以向Set-Cookie响应首部添加一个Domain属性来控制哪些站点可以看到那个cookie
2)cookie的路径属性
cookie规范允许用户将cookie与部分Web站点关联起来。可以通过Path属性来实现这一功能,在这个属性列出的URL路径前缀下所有cookie都是有效的。
1.5.2 cookies版本0
Set-Cookie首部有一个强制性的cookie名称和cookie值。后面跟着可选的cookie属性,中间由分号分隔。
Set-Cookie属性 | 描述 | 实例 |
NAME=VALUE | 强制的。NAME和VALUE都是字符序列 | Set-Cookie:customer=Mary |
Expires | 可选的。日期字符串,用来定义cookie的实际生存期 | Set-Cookie:expires=Wednesday,09-Nov-99 23:12:34 GMT |
Domain | 可选的。浏览器只向指定域中的服务器主机名发送cookie,这样服务器就将cookie限定在特定的域中 | Set-Cookie:domain="joes-hardware.com" |
Path | 可选的。通过这个属性可以为服务器上特定的文档分配cookie | Set-Cookie:path=/orders |
Secure | 可选的。表明只有在HTTP使用SSL安全连接时才会发送cookie | Set-Cookie:secure |
1.5.3 cookies版本1
Set-Cookie2属性 | 描述 | 实例 |
Version | 可选。这个属性的值为整数,对应cookie规范的版本 | Set-Cookie2:Version="1" |
Comment | 可选。说明服务器准备如何使用这个cookie。这个值必须采用UTF-8编码 | |
CommentURL | 可选。提供了一个URL指针,只向详细描述了cookie目的及策略的文档 | |
Discard | 可选。如果选择该属性,就会在客户端程序终止时,只是客户端放弃这个cookie | |
Max-Age | 可选。整数,用于设置以秒为单位的cookie生存期 | |
Port | 可选。这个属性可以单独作为关键字使用,应用于cookie的端口列表,即只能向端口与列表中的端口相匹配的服务器提供cookie | Set-Cookie2:port=“80,81,8080” |