当前位置: 首页 > news >正文

Cookie,Session ,token , JWT的区别

目录

Http无状态的定义:

Session

Session工作流程:

token

token的工作流程:

JWT的安全性:

JWT的优缺点


前言

在当今数字化的网络世界里,数据的交互与用户状态的管理至关重要。Cookie、Session 和 Token 犹如三把关键钥匙,开启着不同的 “安全与便捷之门”。当你畅游各类网站,轻松购物、顺畅社交,背后都有它们在默默支撑。Cookie 像贴心的小助手,记录着你的浏览偏好;Session 则如同隐秘的会议室,安全守护着你的登录状态;Token 更似万能通行证,让前后端沟通无阻。接下来,就让我们一同深入探究它们的奥秘,了解如何让这些技术为我们打造更优质的网络体验。

假设一个情景:

你在登录小破站,你会发现你第一次输入完用户名和密码之后,下次再去登录,就不需要输入用户名和密码了

 这个时候你输入的用户名和密码是会存储在数据库中,下次再登录的时候,小破站就会根据你输入的用户名和密码与数据库的做比对。

有时候会让浏览器记住你的密码,可是这么做并不安全,浏览器要是被黑了,用户隐私就泄露了。就算浏览器能够保证你的信息安全,也要解决Http无状态的问题。

此时就出现了Cookie,工作的大概流程:

1.浏览器发送HTTP请求给服务端

2.服务端进行Cookie设置,Name(名)和value(值)

3.下次浏览器再给服务器发送请求是都会带上这个Cookie,让服务器识别它

Cookie的本质:保存在每一次请求中的一小段数据

Http无状态的定义:

HTTP(超文本传输协议)是一种无状态的协议,这意味着服务器不会保留任何两个请求之间的状态信息。每个HTTP请求都是独立的,服务器处理请求后不会记住任何状态信息。这种设计使得HTTP协议简单且适用于大规模分布式系统,但同时也带来了一些挑战,特别是在需要保持用户状态的Web应用程序中。

无状态的含义及其影响

无状态协议的含义是,服务器不会记住客户端的任何信息。客户端每次请求都必须提供完整的信息,服务器处理完请求后不会保留任何会话信息。这种方式减轻了服务器的存储负担,提高了处理请求的效率。然而,这也意味着服务器无法“记住”用户的操作,例如在在线购物中用户加入购物车的商品。

解决无状态问题的方法

为了解决HTTP无状态带来的问题,Web应用通常会使用CookieSession来保持状态。Cookie是存储在客户端的小型数据片段,它可以保存用户的登录信息、偏好设置等。当用户再次访问服务器时,浏览器会自动发送Cookie,服务器通过Cookie识别用户。

Session是另一种技术,它在服务器端保持用户状态。当用户访问Web应用时,服务器会创建一个Session,并将其ID发送给客户端。客户端将Session ID存储在Cookie中,并在随后的请求中发送给服务器。服务器通过Session ID识别用户,并提供个性化的服务。

无状态协议的优缺点

无状态协议的优点在于简化了服务器的设计和实现,因为服务器不需要跟踪和管理状态信息。这对于处理大量并发请求的服务器来说是一个巨大的优势。然而,无状态也意味着无法为用户提供连贯的体验,因为服务器无法记住用户的先前操作。

总结

HTTP的无状态设计是为了简化服务器的处理和提高效率,但在实际应用中,通常需要通过Cookie和Session等技术来维持用户状态。这些技术使得无状态的HTTP协议能够支持复杂的Web应用,同时也带来了新的挑战,如安全性和性能问题。

 

Session

可以发现如果将用户名密码保存在Cookie上,是非常不安全的。这时就发明了Session(会话)

Session涉及到两个概念:会话时间和Session ID。

会话时间:

这是服务器定义的会话结束时间。开始时间就是访问的开始,结束时间就不是你关闭浏览器的时间了,而是下次登录需要你重新输入用户名和密码的时间了。

Session ID:

通常是一串没有规律的字符串,是服务器生成的,存储在服务端

Session工作流程:

1.浏览器将用户名和密码发送给服务端

2.服务器进行Cookie设置,将SessionID和会话结束时间返回给浏览器。

3.浏览器下次访问时就会将Cookie发送给服务端,可见cookie上的信息是sessionID和会话时间,不像以前一样是用户名和密码,大大提高了安全性

token

随着用户数量的增加,Session的技术就不适用了,因为一旦人数多了,服务器要存储大量的SessionID在服务器里,有时还需要分享一些通用的SessionID给别的服务器。高并发的情况下,很容易服务器就炸了

存储在数据库就更不用说了,压力太大了,而且数据库也不是很能打,不然要redis干嘛。

token的工作流程:

1.浏览器将用户名和密码发送给服务端

2.服务器将名字和密码变成JWT签名密文返回给浏览器。

3.浏览器接收JWT之后以Cookie或者Storage来存储在客户端。下次访问时就会将JWT密文签名发送给服务端。

这个和Session是比较相似的,只不过JWT是储存在客户端的。

JWT的安全性:

JWT由三部分组成:Header(头部)  payload(负载) signature(签名) 

JWT的生成过程: 

header和pyload 二者通过 base64位编码,然后分别生成了一段字符串。二者结合起来,再根据服务器保存的密码,经过 signature 算法最后一段字符串。三者合并生成最后的JWT。

JWT的优缺点

优点
1,可扩展

在JWT中的Payload部分可以存储用户信息

2,支持跨域

默认的Cookie和Session只能在一台服务器上存储数据不支持跨服务器,但JWT支持跨服务器

3,无状态

在大量用户的情况下,减少了服务端的存储压力

缺点
1,安全性

JWT是随着请求到达服务器中的,容易被抓包,Payload中用户信息容易被泄露,所以不建议在JWT中存储用户的敏感信息。

2,存储性能

JWT有着易扩展的属性,所有的数据都可以被存储在Payload中,经过编码之后就会导致JWT很长。而且每一次请求都会在请求头中的Local Storage中携带JWT,这就导致使用JWT的HTTP请求会造成巨大的开销。

3,一次性

JWT的特点是无状态的,这也就导致了JWT是一次性的,想要修改内容就必须签发一个新的JWT。

4,无法废弃

一旦签发一个JWT,在过期之前这个JWT都是有效的。即使签发了一个新的JWT,在验证时未过期的旧JWT也是可以验证通过的。

5,无法续签

与上同理,如果想维持JWT无状态的特性,续签JWT的有效时间则必须签发新的JWT。

结尾

至此,我们对 Cookie、Session 和 Token 有了较为清晰的认识。它们各有所长,在不同场景中发挥关键作用,共同编织起网络交互的稳固架构。无论是保障用户隐私、实现无缝登录,还是助力高效的前后端协作,都离不开它们的身影。希望大家在今后的开发学习、日常网络使用中,能巧妙运用这些知识,让网络世界因合理利用技术而变得更加美好,开启属于自己的高效、安全网络之旅。

相关文章:

  • c++--define和const
  • 日志2025.2.15
  • B. Olya and Game with Arrays
  • LDR6500 PD芯片:智能充电与数据传输
  • CAS单点登录(第7版)3.安装
  • 家里WiFi信号穿墙后信号太差怎么处理?
  • 【愚公系列】《Python网络爬虫从入门到精通》012-字符串处理
  • 「软件设计模式」装饰者模式(Decorator)
  • SpringBoot 与 SpringCloud的版本对应详细版
  • 3-初始化项目
  • GMSL 实例1:当 MAX96717 遇上 MAX96724,打通 Camera 视频数据传输
  • 【设计模式】【行为型模式】解释器模式(Interpreter)
  • Golang 的字符编码与 regexp
  • 论文设置页码
  • 【PCIe XDMA开发】主机相关设置
  • 【JavaEE进阶】验证码案例
  • 滚动弹幕JS
  • 阿里云视频点播,基于thinkphp8上传视频
  • 性能测试流程、主流性能工具
  • Golang internals
  • 中拉互联网发展与合作论坛在西安开幕
  • “AD365特应性皮炎疾病教育项目”启动,助力提升认知与规范诊疗
  • 国家卫健委通报:吊销肖某医师执业证书,撤销董某莹四项证书
  • 外企聊营商|特雷通集团:税务服务“及时雨”
  • 习近平会见智利总统博里奇
  • 广东省人大教科文卫委原主任委员梁万里被开除党籍:退休后受贿仍不知止