cookie、session、token、JWT

http是无状态的,第一次访问服务器需要输入账号密码,关闭网页,再次访问服务器,服务器不知道又是你来访问的,又要再次输入账号密码数据库校验,很麻烦。那怎么保持登录状态呢

1、cookie:

        每次http请求都自动带数据给服务器的技术

存储:浏览器

销毁:超过有效期

流程:

        1、http访问服务器,服务器set-cookie(name,value值)返回cookie给浏览器,cookie存储在浏览器。

        2、此后浏览器访问服务器时,会将set-cookie里面的值放到HTTP请求头里面的cookie发送到服务器,服务器对cookie进行校验验证,一般结合session进行校验

2、session(会话)

组成

        1、会话时间(结束会话的时间)

        2、唯一SessionID,没有规律的字符串

存储:在服务器/数据库

销毁:关闭网页、调用销毁函数

2.1cookie与session

比较SessionID

过程

        1、用户携带账号密码首次访问服务器,服务器调用数据库验证成功,服务器创建Session(SessionID、会话时间)存在服务器中。

        2、服务器把SessionID、会话时间加到set-cookie里面,会话时间对应设置为cookie的有效期,返回cookie到浏览器。

        3、利用每一次http请求携带cookie的特点,下次访问会自动发送SessionID给服务器,服务器校验SessionID

补充:服务器在发送SessionID时会对含有SessionID的cookie进行签名,即使被黑客试图破解修改了sessionID,修改后的SessionID会变成服务器识别不了的字符串,也就难以破解

缺点:SessionID存储在服务器/数据库

        1、SessionID存在服务器中,当大量用户访问服务器时,服务器面临要存储大量SessionID,如果有多台服务器,服务器避免超载,会分享一些用户给其他服务器,其他服务器通用的SessionID才能避免用户再次输入账号密码,这些都不行

        2、如果让数据库存储SessionID,数据库万一崩溃了,又影响服务器获取SessionID

3、引出token:

        Token 其实就是访问资源对凭证。一般是用户通过用户名和密码登录成功之后,服务器将登录凭证做数字签名,加密之后得到的字符串作为token

例子

        token是健身房vip会员卡,办卡留下的姓名就是用户唯一标识,下次来健身房只需要出示vip会员卡就可以进入健身房

存储:浏览器的Cookie或Local Storage

token校验机制

        1、当客户端第一次请求时,发送用户信息至服务器(用户名、密码),服务器对用户信息使用HS256算法及密钥进行签名,再将这个签名和数据一起作为Token一起返回给客户端

        2、服务器不保存Token,客户端保存Token(比如放在Cookie里或者Local Storage里)

        3、当客户端再次发送请求时,在请求信息中将Token一起发给服务器

        4、服务器用同样的HS256算法和同样的密钥,对数据再进行一次签名,和客户端返回的Token的签名进行比较,如果验证成功,就向客户端返回请求的数据

token对比session

        1、这种基于token的认证方式相比传统的session认证方式更节约服务器资源,并且对移动端和分布式更加友好。其优点如下:

        2、支持跨域访问:cookie是无法跨域的,而token由于没有用到cookie(前提是将token放到请求头中),所以跨域后不会存在信息丢失问题

         3、无状态:token机制在服务端不需要存储session信息,因为token自身包含了所有登录用户的信息,所以可以减轻服务端压力

        4、更适用CDN:可以通过内容分发网络请求服务端的所有资料 更适用于移动端:当客户端是非浏览器平台时,cookie是不支持的,采用token认证方式会简单很多

         5、无需考虑CSRF:由于不再依赖cookie,所以采用token认证方式不会发生CSRF,所以也就无需考虑CSRF的防御

4、JWT

        jwt是token的一种实现方式

组成: header、payload、signature

        header:声明用什么算法生成签名

        payload:一些特定数据

        signature:header + payload生成的 签名,保存在服务端

校验机制

        1、用户登录服务器,服务器生成一个jwt包括header、payload、signature三部分,header +         payload生成签名(signature部分),保存在服务端

        2、服务器发送jwt给浏览器,jwt存储在浏览器的cookie或storage

        3、用户每次请求都会把jwt发送给服务器,服务器接收到用户的jwt,提取来自用户jwt的 header + payload生成的签名,与之前保存在服务端的签名进行校验。 用户就不用输入账号密码了

session cookie 与token/jwt

        1、在分布式微服务技术日趋流行的今天,大型网站的设计都尽量避免使用 session 实现 HTTP 状态化。

        2、session简单粗暴,在服务端维护会话信息,在客户端保存session id,服务端能够轻易地把会话控制在自己的手中,但服务集群化产生了session共享的负担;

        3、jwt(token)只在客户端保存会话信息,服务端通过密钥校验会话,(相比session)拿时间换空间,卸下了服务端集群共享会话信息的负担,同时也加大了服务端控制会话的难度。

        4、token可以跨域,cookie不能跨域

参考

博主:技术蛋老师

链接1:token校验机制_再给他一份小薯条的博客-CSDN博客_token校验

链接2:token与JWT详细介绍_龙域、白泽的博客-CSDN博客_jwt token

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值