13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

傻傻分不清之Cookie、Session、Token、JWT

什么是认证(Authentication)

什么是授权(Authorization)

什么是凭证(Credentials)

什么是 Cookie

cookie 重要的属性属性说明name=value键值对,设置 Cookie 的名称及相对应的值,都必须是字符串类型

什么是 Session

session.png

根据以上流程可知,SessionID 是连接 Cookie 和 Session 的一道桥梁,大部分系统也是根据此原理来验证用户登录状态。

Cookie 和 Session 的区别

什么是 Token(令牌)

Acesss Token

  1.  客户端使用用户名跟密码请求登录
  2.  服务端收到请求,去验证用户名与密码
  3.  验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
  4.  客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
  5.  客户端每次向服务端请求资源的时候需要带着服务端签发的 token
  6.  服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据

Refresh Token

Token 和 Session 的区别

什么是 JWT

生成 JWT

jwt.io/www.jsonwebtoken.io/

JWT 的原理

           Authorization: Bearer复制代码

JWT 的使用方式

方式一

    当用户希望访问一个受保护的路由或者资源的时候,可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求头信息的 Authorization 字段里,使用 Bearer 模式添加 JWT。 

 
 
 
 
  1. GET /calendar/v1/events  
  2.    Host: api.example.com  
  3.    Authorization: Bearer  

方式二

方式三

    通过 URL 传输

 
 
 
 
  1. http://www.example.com/user?token=xxx 

项目中使用 JWT

**项目地址: https://github.com/yjdjiayou/jwt-demo **

Token 和 JWT 的区别

相同:

区别:

常见的前后端鉴权方式

  1.  Session-Cookie
  2.  Token 验证(包括 JWT,SSO)
  3.  OAuth2.0(开放授权)

常见的加密算法

image.png

注意:

常见问题

使用 cookie 时需要考虑的问题

使用 session 时需要考虑的问题

使用 token 时需要考虑的问题

使用 JWT 时需要考虑的问题

使用加密算法时需要考虑的问题

分布式架构下 session 共享方案

1. session 复制

优点: 可容错,各个服务器间 session 能够实时响应。

缺点: 会对网络负荷造成一定压力,如果 session 量大的话可能会造成网络堵塞,拖慢服务器性能。

2. 粘性 session /IP 绑定策略

优点: 简单,不需要对 session 做任何处理。

缺点: 缺乏容错性,如果当前访问的服务器发生故障,用户被转移到第二个服务器上时,他的 session 信息都将失效。

适用场景: 发生故障对客户产生的影响较小;服务器发生故障是低概率事件。实现方式: 以 Nginx 为例,在 upstream 模块配置 ip_hash 属性即可实现粘性 session。

3. session 共享(常用)

4. session 持久化

优点: 服务器出现问题,session 不会丢失

缺点: 如果网站的访问量很大,把 session 存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。

只要关闭浏览器 ,session 真的就消失了?

不对。对 session 来说,除非程序通知服务器删除一个 session,否则服务器会一直保留,程序一般都是在用户做 log off 的时候发个指令去删除 session。然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根本不会有机会知道浏览器已经关闭,之所以会有这种错觉,是大部分 session 机制都使用会话 cookie 来保存 session id,而关闭浏览器后这个 session id 就消失了,再次连接服务器时也就无法找到原来的 session。如果服务器设置的 cookie 被保存在硬盘上,或者使用某种手段改写浏览器发出的 HTTP 请求头,把原来的 session id 发送给服务器,则再次打开浏览器仍然能够打开原来的 session。恰恰是由于关闭浏览器不会导致 session 被删除,迫使服务器为 session 设置了一个失效时间,当距离客户端上一次使用 session 的时间超过这个失效时间时,服务器就认为客户端已经停止了活动,才会把 session 删除以节省存储空间。


网站栏目:傻傻分不清之Cookie、Session、Token、JWT
网页URL:http://cdbrznjsb.com/article/copehgd.html

其他资讯

让你的专属顾问为你服务