首页 > 代码库 > 客户端识别和cookie机制

客户端识别和cookie机制

HTTP最初是一个匿名的、无状态的请求,服务器处理来自客户端的请求,然后向客户端回送响应,web服务器几乎没有什么信息来判定是哪个用户发送的请求,也无法记录用户的请求序列,以下有几种方法来增加用户识别机制:

第一、HTTP首部

1.from首部:包含了E-mail地址

2.User-Agent:包含了浏览器相关信息,包括程序的名称和版本,

3.Referer:提供了用户来源页面的URL

第二、客户端的IP地址:

通过TCP链接得到IP地址,存在的问题:

  1. 客户端IP地址描述的所用的机器,而不是用户
  2. 很多用户的地址经过NAT地址转化,所以用户的真实IP是不知道的
  3. HTTP代理和网管通常会打开一些新的到原始服务器的IP地址,这样web服务器看到的是代理服务器的IP地址

第三、用户登录

发起请求

站点不知道用户身份,返回401 loginRequiredHTTP 响应吗

弹出对话框,用户输入用户名、密码

今后的请求要使用用户名时,浏览器在每次请求中都向服务器发送Authorization首部

问题:访问不同的站点时每次都需要登录

第四、胖URL

每个URL后面附加一个用户特有的标识码

缺点:

  • 丑陋的URL
  • 无法共享URL
  • 破坏缓存
  • 额外的服务器负荷
  • 在会话间是非持久的

第五、cookie

cookie是当前识别用户、实现持久化会话的最好方式,前面的各种技术可以综合使用。

1、cookie的类型

cookie可以分为会话cookie和持久cookie,会话cookie是一种临时cookie,用户退出浏览器时,会话cookie就会被删除;持久cookie生存时间比较长一下,用来维护用户周期性访问的站点的配置文件或登录名,他存在硬盘,浏览器退出时,计算机重启时仍然存在。

会话cookie与持久cookie之间的区别:

如果设置了discard参数,或者没有设置Expires或mas-age参数来说明过期事假,这个cookie就是会话cookie

2、cookie是工作流程

用户首次访问服务器时,web服务器对用户一无所知,web服务器希望这个用户会再次回来,所以给这个用户一个独有的cookie,这样以后用户就可以识别这个用户了,cookie中包含了一个由名字==值这样的信息构成的任意列表,并通过set-cookieHTTP响应首部将其返给用户,浏览器会记住从服务器返回的set-cookie首部中的cookie内容,并将cookie存储在浏览器的cookie数据库中,将来用户访问同一站点时,在其首部带上cookie

3、cookie文件格式

不同的浏览器在存cookie时有不同的格式。

cookies版本0:

set-cookie:name=value,[expires=date],[path=path],[domain=domain]

expires:用来定义cookie的生存周期,一旦过了改日期就不在存储该cookie

domain:浏览器只向指定域发送cookie

path:通过这个属性可以为服务器上 指定的文档分配cookie

secure:如果包含了这个属性,就只有在HTTP使用SSL安全链接是才会发送cookie

4.cookie与缓存

如果无法缓存文档就应该标示出来,如果除了set-cookie首部之外文档是可缓存的,就是用cache-control:nocache=“set-cookie”