会话跟踪是web程序中常用的技术,用来跟踪用户的整个会话。
常用的会话跟踪技术是Cookie 和Session。
Cookie 通过客户端记录用户信息,Session通过服务端记录用户信息 !
简单来说就是cookie是存储在客户端的(浏览器),而session是存储在服务端的。
简单点理解 会话追踪的原理就是由于HTTP是无状态的,当有登录状态,需要区分用户的时候,服务端不知道对方是谁,所以就给客户端的用户们每人发一个会话标识,这样服务端就可以根据这个不同的id知道谁是谁了
一、 Session的发展史:
- 在很久以前,web网页基本上只是浏览,随着web交互的兴起,有了登录加购物车等,这样服务端就需要知道这个人是谁,谁加了什么。
- 因为HTTP是无状态的,所以想出来的办法就是给大家每个人发一个会话标识(session id)。( 简单点说就是一个字符串,每个人收到的不一样,每次发起请求时,浏览器把这个字符串告诉服务端,服务端就知道谁是谁了。)
- 但是缺点是如果上千万的人都来访问,服务器就要保存上千万的session id ,对服务端来说压力太大,限制了服务器的扩展能力。而且如果是集群,会有在A机器上登录,那么B机器上没有这个人的session id 的问题。
- 当然可以使用会话粘滞解决这个问题,就是让用户请求一直粘连在机器A上,但是这样如果机器A挂了就完蛋了。
- 也可以使用session复制,但是这个方法太笨重了。
- 还可以把session id 集中存储到一个地方,但是会有单点失败的可能,也就是说负责session登录的那个机器如果挂了, 所以人都要重新登录一遍。
- 比较推荐的是把session 保存在 redis 里。方便存储和查询
session的原理:
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
二、Cookie:
定义:
Cookie是由客户端保存的小型文本文件(最大支持4096字节),其内容为一系列的键值对。
是由W3C组织提出的,目前已经成为标准,所有主流浏览器都支持Cookie。
注意: 如果浏览器不支持cookie或者禁用了,cookie功能就失效了。比如 ios 安卓等 不支持cookie因为他们用的是原生的系统,而不是浏览器
使用场景:
cookie和session组合在一起可以作为用户认证机制之一: Session-Cookie机制
工作原理:
服务器通过Set-Cookie响应头字段来指示浏览器保存Cookie, 浏览器通过Cookie请求头字段来告诉服务器之前的状态。
Cookie中包含若干个键值对,每个键值对可以设置过期时间。
Cookie需要由HTTP服务器设置,保存在浏览器中,在用户访问其他页面时,会在HTTP请求中附带上该服务器之前设置的cookie。