首页 > 代码库 > 客户端识别和cookie机制
客户端识别和cookie机制
HTTP最初是一个匿名的、无状态的请求,服务器处理来自客户端的请求,然后向客户端回送响应,web服务器几乎没有什么信息来判定是哪个用户发送的请求,也无法记录用户的请求序列,以下有几种方法来增加用户识别机制:
第一、HTTP首部
1.from首部:包含了E-mail地址
2.User-Agent:包含了浏览器相关信息,包括程序的名称和版本,
3.Referer:提供了用户来源页面的URL
第二、客户端的IP地址:
通过TCP链接得到IP地址,存在的问题:
- 客户端IP地址描述的所用的机器,而不是用户
- 很多用户的地址经过NAT地址转化,所以用户的真实IP是不知道的
- 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”