什么是cookie和session?他们的区别?

cookie和session是干什么的?


众所周知,客户端和服务器之间使用http协议进行通信,而http协议是无状态协议。客户端每次发送请求都需要服务器进行回响,请求结束后(数据交换完毕),主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。也叫“短连接”。

假设当A用户登录某个网页之后,想要切换到其他界面进行操作时,由于http协议是无状态的,所以服务端无法判断其身份,这时就需要重新进行登录。为了使某个域名下的所有网页能够共享某些数据,这时就需要用到 cookie 和 session 。

什么是cookie?什么是session?


cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在客户端本地的一小块文本数据,它会在浏览器下次向同一服务器再发起请求时被携带一并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。

session 代表着服务器和客户端一次会话的过程,在客户端发起请求时由服务器端创建。session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当客户端关闭会话,或者 session 超时失效时会话结束。

cookie和session的产生过程?


  1. 首先,客户端会发送一个http请求到服务器。
  2. 服务器端接受客户端请求后,建立一个 session ,并回送一个http响应到客户端,这个响应头,其中就包含了 set-cookie 头部(set-cookie 格式如下:set-cookie: value[; expires=date][; domain=domain][; path=path][; secure]),而 set-cookie 头部中包含了 sessionid ( sessionid 就是连接 cookie 和 session 的桥梁)。客户端会将 sessionid 信息保存在 cookie 中,同时 cookie 也将记录该 sessionid 属于哪个域名。可以理解为 cookie 是由服务端创建的,保存在客户端。
  3. 当客户端再次发起请求时,会自动判断该域名下是否存在 cookie 信息,如果存在,会自动向服务端发送 cookie 信息。
  4. 服务器接收请求,从 cookie 中得到 sessionid ,通过 sessionid 查找对应的 session ,如果找到就可以继续执行操作,如果没找到就说明用户没有登录或者登录失效。

cookie和session有什么不同?


  • 作用范围不同,cookie 保存在客户端(浏览器),session 保存在服务器端。
  • 存取方式的不同,cookie 只能保存 ASCII,session 可以存任意数据类型,一般情况下我们可以在 session 中保持一些常用变量信息,比如说 userid 等。
  • 有效期不同,cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,session 一般失效时间较短,客户端关闭或者 session 超时都会失效。
  • 隐私策略不同,cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 cookie 中导致信息被窃取;session 存储在服务端,安全性相对 cookie 要好一些。
  • 存储大小不同, 单个 cookie 保存的数据不能超过 4k,session 可存储数据远高于 cookie。

什么是token?


token 是服务端生成的一串字符串(由uid+time+sign[+固定参数]组成),以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个 token 便将此 token 返回给客户端,以后客户端只需带上这个 token 前来请求数据即可,无需再次带上用户名和密码。

  • uid: 用户唯一身份标识
  • time: 当前时间的时间戳
  • sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
  • 固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库

token的好处

token 可以减轻服务器的压力,减少频繁的查询数据库。

存放位置

token 在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中。

token认证流程

token 的认证流程与 cookie 很相似

  1. 用户登录成功后,服务器返回 token 给客户端。
  2. 客户端收到数据后保存在客户端。
  3. 客户端再次访问服务器,将 token 放入headers中。
  4. 服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码。
 
 
posted @ 2022-04-01 16:48  只是时光他不懂  阅读(206)  评论(0)    收藏  举报