当前位置:首页 > 服务端 > 一文搞懂Cookie,Session,Token,JWT

一文搞懂Cookie,Session,Token,JWT

2022年11月10日 09:42:00服务端12

HTTP协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息。这样一些交互业务就无法支撑了。Cookie应运而生。

Cookie

通过F12开发者工具,先瞅瞅Cookie的颜值

一文搞懂Cookie,Session,Token,JWT _ JavaClub全栈架构师技术笔记

从图中可以看到Cookie包括这些内容:Name,Value,Domain,Path,Expires / Max-Age,Size,HttpOnly,Secure,SameSite,Priority。

Cookie的传递会经历这4步

  1. Client发送HTTP请求给Server
  2. Server响应,并附带Set-Cookie的头部信息
  3. Client保存Cookie,之后请求Server会附带Cookie的头部信息
  4. Server从Cookie知道Client是谁了,返回相应的响应

Cookie的英文翻译是甜品,使用Cookie可以自动填写用户名、记住密码等,是给用户的一点甜头。

Server拿到Cookie后,通过什么信息才能判断是哪个Client呢?服务器的SessionID。

Session

如果把用户名、密码等重要隐私都存到客户端的Cookie中,还是有泄密风险。为了更安全,把机密信息保存到服务器上,这就是Session。Session是服务器上维护的客户档案,可以理解为服务器端数据库中有一张user表,里面存放了客户端的用户信息。SessionID就是这张表的主键ID。

Cookie中保存SessionID

一文搞懂Cookie,Session,Token,JWT _ JavaClub全栈架构师技术笔记

Session信息存到服务器,必然占用内存。用户多了以后,开销必然增大。为了提高效率,需要做分布式,做负载均衡。因为认证的信息保存在内存中,用户访问哪台服务器,下次还得访问相同这台服务器才能拿到授权信息,这就限制了负载均衡的能力。而且SeesionID存在Cookie,还是有暴露的风险,比如CSRF(Cross-Site Request Forgery,跨站请求伪造)。

如何解决这些问题呢?基于Token令牌鉴权。

Token

首先,Token不需要再存储用户信息,节约了内存。其次,由于不存储信息,客户端访问不同的服务器也能进行鉴权,增强了扩展能力。然后,Token可以采用不同的加密方式进行签名,提高了安全性。

Token就是一段字符串

一文搞懂Cookie,Session,Token,JWT _ JavaClub全栈架构师技术笔记

Token传递的过程跟Cookie类似,只是传递对象变成了Token。用户使用用户名、密码请求服务器后,服务器就生成Token,在响应中返给客户端,客户端再次请求时附带上Token,服务器就用这个Token进行认证鉴权。

Token虽然很好的解决了Session的问题,但仍然不够完美。服务器在认证Token的时候,仍然需要去数据库查询认证信息做校验。为了不查库,直接认证,JWT出现了。

JWT

JWT的英文全称是JSON Web Token。JWT把所有信息都存在自己身上了,包括用户名密码、加密信息等,且以JSON对象存储的。

JWT长相是xxxxx.yyyyy.zzzzz,极具艺术感。包括三部分内容

  • Header

    包括token类型和加密算法(HMAC SHA256 RSA)。

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  • Payload

    传输内容。

    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    
  • Signature

    签名,把header和payload用base64编码后"."拼接,加盐secret(服务器私钥)。

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret)
    

再画个妆,漂亮

一文搞懂Cookie,Session,Token,JWT _ JavaClub全栈架构师技术笔记

可以到https://jwt.io/#debugger-io这个网址卸妆哦

一文搞懂Cookie,Session,Token,JWT _ JavaClub全栈架构师技术笔记

给Token穿个外套

Authorization: Bearer <token>

这就是我们在请求Header里面看到的内容格式了。

JWT的技术细节我会写在《Go编程(三) JWT认证》,欢迎关注。

简要回顾

本文简单介绍了Cookie、Session、Token、JWT的概念,以及为什么需要这些技术。至于更深入的原理和代码使用,就请读者自行研究了哦。至少这篇文章能让你搞懂,看到不会觉得陌生了。哈哈哈。

参考资料

https://jwt.io/introduction/

jwt-handbook-v0_14_1

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3oz769otufok4

作者:测试开发刚哥
来源链接:https://www.cnblogs.com/df888/p/13701789.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/69262.html

分享给朋友:

“一文搞懂Cookie,Session,Token,JWT” 的相关文章

springboot怎么获取token

[control层获取] @Autowired private HttpServletRequest request; request.getHeader("token"); [service层获取] 封...

Maven Web项目配置Mybatis出现SqlSessionFactory错误的解决方案

Maven Web项目配置Mybatis出现SqlSessionFactory错误的解决方案

一、错误现象   [html]  view plain  copy     严重...

你必须知道的session与cookie

你必须知道的session与cookie

Session本质 提到Session我们能联想到的就是用户登录功能,而本身我们使用Session的基础是通过url进行访问的,也就是使用http协议进行访问的,而http协议本身是无状态的,那么问题来了服务器端是怎么验证客户端身份的? 答:服务器端和客户端验证的联系就是s...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

APPlication,Session和Cookie的区别

APPlication,Session和Cookie的区别

  方法 信息量大小 保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生...

cookie和session的代码实现

cookie和session的代码实现

cookie和session的代码实现  1、设置cookie   今天笔试题考的是cookie的设置,我竟然选了request也可以设置cookie,我的天呀。   我们来看如何在response设置吧 public vo...

cookie 和session 的区别详解

cookie 和session 的区别详解

这些都是基础知识,不过有必要做深入了解。先简单介绍一下。 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪录下来。当下次你再光临同一个网站,WEB 服务器会先看看有没有...

Jmeter之处理session、cookie以及如何做关联

Jmeter之处理session、cookie以及如何做关联

session和cookie的概念 关于session和cookie应该有很多文章都进行了一一说明,这里就不再重复赘述,我觉得有一个博客写的挺不错的!可以去参照他写的博客,写的非常的详细,比喻也非常的形象,看了之后秒懂! http://blog.csdn.net/axin6...

asp.net中cookie和session的区别和相关使用

彻底研究了下cookie和session的原理,发现了很多有趣的东西,原来我的很多想法和制定协议的那些大神们也有相同之处! cookie是存放于用户的本地的机器上的小文件,由浏览器创建和读写这个文件, 此文件的作用,是存放了用户访问某个网站时的一些资料,比如登陆...

HTTP Session、Cookie机制详解

一、什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息。  这 里用一个形象的比喻来解释session的工作方式。假设We...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。