为什么有了session和cookie还要使用JWT

session和cookie

为什么要使用session和cookie,他的流程是怎么样的

因为浏览器是无状态的,相当于每一次访问都是一次全新的访问,我们一般是登录来进行校验获取他的全部信息,所以会出现这个情况

这样当然也可以使用,但是很繁琐,并且影响性能,所以出现了session和cookie,他会生成一个标识符sessionid传给前端存在cookie中

这样就可以解决浏览器无状态的问题

为什么有了session和cookie还要使用JWT

问题一

但是这个时候会出现一个问题,那么假如是分布式呢?

现在想一个例子,如果我做了集群,出现了一个新的服务器,我要怎么保证负载均衡可以把请求发送到我的原服务器呢?如果请求发到新服务器,会出现什么结果呢?

如果用户将请求发送到新服务器,会导致找不到sessionid对应的session,从而导致用户丢失登录状态,从而必须重新登录,这是大忌

那么我们是怎么解决的呢,我们也可以使用redis,将session和sessionid存入redis中,从而保证分布式也可以共享session数据

但是这样又会出现一个问题

问题二

依赖性太高了,如果出现问题会导致,所有用户登录失效

所以JWT出现了

JWT

JWT的工作原理和流程

工作原理:就是后端返回给前端一个JWT,前端每次发请求会带上这个token

流程:

其中JWT的结构图

其中头部就是存的比如算法,使用的什么类型

荷载存的就是我们的主要内容,一般有发起人,用户,失效时间,还有我们想存的都可以存

签名就是将头部和荷载进行一个加密

JWT的缺点

虽然JWT可以解决我们上面的问题,但是他也有一些缺点

1.因为无状态,token如果没有到期,我无法主动修改令牌来使用户下线

(什么叫无状态,

  • 每个请求自包含: 每个请求都包含了所有需要的信息(如 JWT),使得服务器能够理解请求而无需保持会话状态。
  • 服务器不需要存储会话信息: 服务器不需要在内存中保存有关用户会话的信息。所有的用户数据和会话信息都包含在 JWT 中,由客户端提供。

)

2.不加密,会暴露头部和荷载的信息

3.占内存,因为会转为base64格式,在网络传输中会比较大

如果不使用他们,能不能做一个登录校验和令牌

也可以的,我们可以使用一个唯一标识,比如时间戳,然后充当他的Token,并且放入redis,这样也可以解决浏览器无状态问题

  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SessionCookieJWT是用于在Web应用中管理用户身份和状态的机制。 Session是一种服务器端的会话状态记录机制,它基于Cookie实现。服务器在生成Session时会在Cookie中存储一个SessionID,用于标识该用户的会话状态。Session数据存储在服务器端,可以存储任意数据类型,并且具有较高的安全性。Session的默认生效时间是30分钟,但可以根据需要进行调整。\[1\]\[3\] Cookie是一种浏览器实现的数据存储技术,用于在客户端存储少量的数据。服务器在生成Cookie时会将其发送给浏览器,浏览器会在下一次请求同一网站时将该Cookie发送给服务器Cookie可以用于会话管理、个性化设置和用户行为追踪等功能。Cookie存储在客户端,以文本形式保存字符串类型的数据,单个Cookie的数据大小不能超过4KB。然而,Cookie的安全性相对较低,容易受到攻击。\[2\] JWT(JSON Web Token)是一种用于在客户端和服务器之间传递安全信息的开放标准。它由三部分组成:头部、载荷和签名。JWT的头部包含算法和令牌类型等信息,载荷包含要传递的数据,签名用于验证令牌的真实性。JWT具有自包含性,可以在令牌中携带用户身份和其他相关信息,无需在服务器端存储会话状态。JWT的优点是可扩展性好、适用于分布式系统和无状态的API等场景。\[3\] 综上所述,Session是一种服务器端的会话状态记录机制,Cookie是浏览器实现的数据存储技术,而JWT是一种用于在客户端和服务器之间传递安全信息的开放标准。它们各自具有不同的特点和适用场景,可以根据具体需求选择使用。 #### 引用[.reference_title] - *1* [Cookie,SessionJWT](https://blog.csdn.net/qq_40866897/article/details/109162111)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [一文详解Token,Session,CookieJWT的区别](https://blog.csdn.net/loseyourself94/article/details/129991986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值