对cookie,session,token,jwt的理解

对这几个东西有点凌乱了,今天有时间整理下web

cookie

Cookie的诞生算法

因为HTTP协议是无状态的,而服务器端的业务必须是要有状态的。Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用。好比判断用户是不是第一次访问网站。目前最新的规范是RFC 6265,它是一个由浏览器服务器共同协做实现的规范。数据库

Cookie的处理分为:json

服务器像客户端发送cookie后端

浏览器将cookie保存浏览器

以后每次http请求浏览器都会将cookie发送给服务器端缓存

session

1. 为何要有session的出现?
答:是因为网络中http协议形成的,由于http自己是无状态协议,这样,没法肯定你的本次请求和上次请求是否是你发送的。若是要进行相似论坛登录相关的操做,就实现不了了。服务器

2. session生成方式?
答:浏览器第一次访问服务器,服务器会建立一个session,而后同时为该session生成一个惟一的会话的key,也就是sessionid,而后,将sessionid及对应的session分别做为key和value保存到缓存中,也能够持久化到数据库中,而后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。而后服务器根据sessionid找到对应的session进行匹配;
还有一种是浏览器禁用了cookie或不支持cookie,这种能够经过URL重写的方式发到服务器;cookie

简单来说,用户访问的时候说他本身是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。网络

token

概念: 访问资源的令牌

验证流程:

  1. 把用户的用户名和密码发到后端

  2. 后端进行校验,校验成功会生成token, 把token发送给客户端

  3. 客户端本身保存token, 再次请求就要在Http协议的请求头中带着token去访问服务端,和在服务端保存的token信息进行比对校验。

特色:

客户端每次都要携带token, 客户端的内容比较多

 

JWT

概念: JSON WEB TOKEN 的简写。可使用在RESTFUL接口定义, 也可使用在普通的web

组成:

header

在header中声明一些信息

payload、

签证

 

验证流程:

  1. 在头部信息中声明加密算法和常量, 而后把header使用json转化为字符串

  2. 在载荷中声明用户信息,同时还有一些其余的内容;再次使用json 把载荷部分进行转化,转化为字符串

  3. 使用在header中声明的加密算法和每一个项目随机生成的secret来进行加密, 把第一步分字符串和第二部分的字符串进行加密, 生成新的字符串。词字符串是独一无二的。

  4. 解密的时候,只要客户端带着JWT来发起请求,服务端就直接使用secret进行解密。

特色:

  1. 三部分组成,每一部分都进行字符串的转化

  2. 解密的时候没有使用数据库,仅仅使用的是secret进行解密。

  3. JWT的secret千万不能泄密!!!

token和jwt区别

服务端验证客户端发来的token信息要进行数据的查询操做;JWT验证客户端发来的token 在服务端使用密钥校验就能够,不用数据库的查询。