zdq0394.github.com

Tech study and research.

Follow me on GitHub

客户端识别与cookie机制

Web服务器可能会同时与数千个不同的客户端进行对话。 HTTP最初是一个匿名无状态的请求/响应协议。

HTTP首部

首部名称 首部类型 描述
From 请求 用户的E-mail地址
User-Agent 请求 用户的浏览器软件
Referer 请求 用户是从这个页面上依照链接跳转过来的
Authorization 请求 用户名和密码
Client-IP 扩展(请求) 客户端的IP地址
X-Forwarded-For 扩展(请求) 客户端的IP地址
Cookie 扩展(请求) 服务器产生的ID标签

前3种首部From、User-Agent和Referer都不足以识别用户。(From牵涉泄露用户隐私E-mail,所以客户端大多不会携带该信息。)

客户端IP地址

客户端IP地址可以通过TCP连接的对端地址可以查找,当然如果HTTP首部(Client-IP或者X-Forwarded-For)存在,优先级更高。

用户登录

Web服务器可以要求用户通过凭证(用户名和密码或者token)进行认证。

HTTP中包含了内建的机制WWW-AuthenticateAuthorization首部进行用户认证。

胖URL

cookie是当前识别用户,实现持久会话的最好方式。

cookie类型

cookie包括两种:会话cookie和持久cookie。它们之间唯一的区别过期时间

  • 会话cookie: 一种临时cookie,它记录了用户访问站点时的设置和偏好。用户退出浏览器时,会话cookie就删除了。
  • 持久cookie: 生存时间长一些,存储在硬盘上。通常会用来维护某个用户会周期性访问的站点的配置文件或登录名。

如果设置了一个Discard参数,或者没有设置Expires或Max-Age参数来说明扩展的过期时间,这个cookie就是一个会话cookie

cookie如何工作的

cookie就像服务器给用户贴的一个标签贴纸。当用户访问一个Web站点时,这个Web站点就可以读取那个服务器贴在用户身上的所有标签贴纸。

HTTP首部

服务器给客户端响应首部:

Set-cookie: id="1234"; domain="www.test.com"

客户端发给服务器的请求首部:

Cookie: id="1234"