cookie session token区别(简单原理理解)

HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。简单来说,比如我登录淘宝网,点击我的购物车,会发起一个网络请求,因为http协议是无状态的,淘宝网并不知道是我发起的请求,会在需要输入用户密码,这显然不合理,cookie及session可以理解为在每次请求时保存我个人的信息。

Cookie

HTTP 协议中的 Cookie 包括 Web Cookie 和浏览器 Cookie,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 Cookie,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。

浏览器发起请求,服务器会进行cookie设置也就是set-cookie, cookie一般是kv结构,cookie发给浏览器之后,浏览器会保存起来,以后每个请求会带上这个cookie,这就免除了上面举例的每次都输入账户密码的繁琐

 

cookie不足

如果简单的把账号密码存在cookie中,他人很容易通过浏览器拿到cookie,此时你的账户密码就完全暴露在别人面前,显然这很不安全。

Session

session可以说是cookie的进化版,session主要包含了session Id和结束会话时间,此时我们登录淘宝网,输入账号密码,淘宝网服务器验证我们的账号密码,并生成一个session Id和结束时间(一般是确定的 设置好的) 这时,服务器把sessionId加入到cookie中,并把cookie有效期设置为session中的时间。

session较cookie优势

即使他人拿到了我浏览器里面包含了session的cookie,他也无可奈何,因为session只是一段随机的字符串,其次服务器发送cookie之前会对含sessionId的cookie签名,防止了篡改的发生

token

首先需要简单了解以下JWT也就是JSON WebToken,用户输入账户密码,会生成一个JWT,服务器只用保存JWT签名和密文,接着把JWT发送给浏览器,和session类似,以后每次用户发送请求便不需要输入账户密码了

jwt一般由三部分组成:

 

header部分声明使用的签名算法,payload一般是特定的数据,比如有效期,header和payload会用base64编码(不是加密)再由header声明的算法得到signature,

(ssm后端中JWT类)

 总结:session诞生并保存在服务器,服务器主导一切,cookie可以看成session的数据载体(当然自己也可以实现用户的登录状态验证),cookie跟随每个HTTP请求发送,token诞生于服务器,保存于浏览器,token就像一个令牌,有了它便可以访问服务器。

本文参考自b站Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?_哔哩哔哩_bilibili

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值