HTTP最初是一个匿名的、无状态的请求,服务器处理来自客户端的请求,然后向客户端回送响应,web服务器几乎没有什么信息来判定是哪个用户发送的请求,也无法记录用户的请求序列,以下有几种方法来增加用户识别机制:
第一、HTTP首部
1.from首部:包含了E-mail地址
2.User-Agent:包含了浏览器相关信息,包括程序的名称和版本,
3.Referer:提供了用户来源页面的URL
第二、客户端的IP地址:
通过TCP链接得到IP地址,存在的问题:
第三、用户登录
发起请求
站点不知道用户身份,返回401 loginRequiredHTTP 响应吗
弹出对话框,用户输入用户名、密码
今后的请求要使用用户名时,浏览器在每次请求中都向服务器发送Authorization首部
问题:访问不同的站点时每次都需要登录
第四、胖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”
原文:http://blog.csdn.net/richard_rufeng/article/details/28859237