Cookie、Session、Token和JWT

1.什么是认证(Authentication)

通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)。

互联网中的认证

用户名密码登录

邮箱发送登录链接

手机号接收验证码

只要你能收到邮箱/验证码,就默认你是账号的主人

2.什么是授权(Authorization)

用户授予第三方应用访问该用户某些资源的权限。

你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权	限)

你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)

实现授权的方式有:cookie、session、token、OAuth

3.什么是凭证(Credentials)
凭证是实现认证和授权的前提,是一种媒介(正数),用来标识访问者身份的方式。

在战国时期,商鞅变法,发明了照身帖。照身帖由官府发放,是一块打磨光滑细密的竹板,上面刻有持有人的头像和籍贯信息。国人必须持有,如若没有就被认为是黑户,或者间谍之类的。

在现实生活中,每个人都会有一张专属的居民身份证,是用于证明持有人身份的一种法定证件。通过身份证,我们可以办理手机卡/银行卡/个人贷款/交通出行等等,这就是认证的凭证。

在互联网应用中,一般网站(如掘金)会有两种模式,游客模式和登录模式。游客模式下,可以正常浏览网站上面的文章,一旦想要点赞/收藏/分享文章,就需要登录或者注册账号。当用户登录成功后,服务器会给该用户使用的浏览器颁发一个令牌(token),这个令牌用来表明你的身份,每次浏览器发送请求时会带上这个令牌,就可以使用游客模式下无法使用的功能。


4.什么是cookie

4.1什么是无状态协议
百科解释:无状态协议是指比如客户获得一张网页之后关闭浏览器,然后再一次启动浏览器,再登录该网站,但是服务器并不知道客户关闭了一次浏览器。对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息,即下一次链接不记住这一次链接的信息。


4.2.什么是有状态协议
通信双方要记住对方,用来共享信息。
个人理解是:记录了通信双方的信息。用一个不恰当的例子来说明,我是谁,我在哪里,我从哪里来,我要去哪里。


4.3.有状态协议和无状态协议的区别
协议的实现有没有要求客户端或者服务端需要维护一个状态。比如tcp传输需要经过握手来初始化事务(数据完整性的校验等),所以它是有状态的;显然http协议本身并没有要求这个,而cookie或session是浏览器和服务器在http协议之上,通过每次给本身并没有状态的请求中添加上某些约定的字段来实现的状态标记。HTTP利用浏览器的session和cookie来判断用户是处于登陆状态还是非登录状态,根据两种状态的不同,将不同的网页发送给浏览器。

机器中的“状态”可以理解为“记忆”,有状态对应有记忆,无状态对应无记忆。正常人是有记忆的,可以记住日常生活中的人和事,记忆存储在脑细胞中,这是有状态的。有些人犯了失忆症或者健忘症,无法记住曾经发生的事,脑海里一片空白,这就是无状态。

有状态协议就是就通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与你上一次的通信没什么关系。

用人话来说就是,你和朋友出去玩,不用每次都报上姓名联系方式等你朋友就知道你是谁,这就是有状态的;你去办事大厅,工作人员不会记得你是谁,每次都要填表、出示身份证,这就是无状态的。

理解了什么是无状态协议和有状态协议,下面的介绍就很容易明白了。


4.4.什么是 Cookie
HTTP是一种无状态协议:每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法辨认上一次的请求发送者和这一次的是不是同一个人。服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动去维护一个状态,这个状态用于告知服务器前后两个请求是否来自同一个浏览器。这个状态就是通过cookie和session来实现的。这样就达到了有状态的目的。cookie也是变量,也是用于存储键值对 , 和 session 非常像。


4.5.cookie存储在客户端
cookie是服务器发送到用户浏览器上并保存到本地的一小块数据,它会在浏览器下次向同一个服务器发送请求时被携带并发送至服务器上。服务器在接受到请求后, 可以从请求头中获取 cookie ,然后进行操作;把修改过的 cookie ,添加到响应中去 ,发送到客户端;客户端接受到响应的 cookie , 自动更新原有的cookie。cookie 是存放在 客户端上的 , 但是 服务器代码可以操作它 ,js代码也可以操作document.cookie 获取 cookie。

比如我们F12打开浏览器的开发者模式,点击Network,会看到有一个"Cookie:。。。"。里面有很多键值对信息,可看到有“session_id=1593925033393; session_name=www.baidu.com”——我打开的是百度,这个是关于session的&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨冉Smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值