用户权限校验的两种方式 1.cookie结合session 2.jwt(token)。(cookie与session的认识与作用)

首先我们要明确一点,一般权限校验时,session和cookie都是成对一起使用的

首先我们了解 cookie是什么?

cookie是一种存储类型 大小只有4kb

cookie的存在意义

我们设置在浏览器cookie中的字段,如果请求时设置了跨域请求可携带cookie,那么发起请求时就会自动将浏览器cookie中存储的字段内容添加到请求头中发送给后端

如果需要浏览器在发起请求时,自动将浏览器cookie中的字段添加到请求头发送给服务端需要有以下条件

第一所有存储在浏览器cookie中的字段path必须为’/‘,这里注意通过js添加的cookie字段需要手动设置,服务器端发送过来存储的cookie字段默认为’/'。第二发送请求时需要设置请求跨域允许携带cookie

如何将内容存储在浏览器的cookie中 ? 也就是我们常说的如何存储cookie 。这里存储cookie指的是存储在浏览器cookie中

1.我们在客户端可以通过js代码主动将内容存储在浏览器的cookie中
2.服务端可以在响应头中设置set-cookie=value这个字段,那么我们浏览器在收到服务器的响应时,会将服务器设置在响应头中的这个字段 的value值存储在浏览器cookie中。

为什么服务器要在响应头中设置cookie然后存在我们客户端的浏览器中呢?

这是因为假设有多个客户端向服务器端发送请求,我们服务器要识别不同的客户端
那么就要在不同的客户端的浏览器cookie中设置不同的cookie值,这样
不同的客户端发送请求到服务器时携带的cookie不同,服务器就能做出识别

好了我们知道了cookie的作用,现在了解session了。

session说白了一般就是一个字符串,但是这不是一般的字符串,是服务器根据不同用户生成的唯一字符串。而这个字符串我们通常叫session。而这个字符串才是真正实现权限验证的关键
为什么说我们cookie和session一起使用呢,因为cookie是一种功能,解决浏览器http请求无状态的功能。通俗来讲就是首先利用cookie的机制------服务器既可以设置cookie内容,浏览器每次掉接口会自动将cookie中的内容发给服务器。

服务器在设置cookie时可以对cookie添加几个属性,以对该cookie做某些限制,例如设置cookie的path,代表cookie生效的地址,domin代表cookie对应的域名,secure代表cookie是否在https协议下才生效。httponly代表该cookie在前端是否可以被操作。

我们知道cookie的这个机制后,结合sesssion就可以实现每次用户掉接口,客户端验证。
具体怎么实现的呢,首先用户每次登录后,我们就可以在服务端生成该用户对应的唯一session,首先将该session存储在服务端,然后将session设置在cookie中(一般在cookie中存储叫sessionId=‘session字符串’)。这样由于cookie的机制,每次客户端一发请求就会自动将cookie中的这个sessionId传到服务端,然后服务端因为之前就已经提前存储好了该客户对应的session,所以只要将客户端传过来的session与服务端存储的session作比较就可以了

总结:

说白了这种权限验证 就是首先利用了cookie的机制----调接口自动将cookie内数据发送给服务器
再在服务器端存储一个特殊的用于验证用户信息的唯一字符串
然后将这个字符串再添加到cookie中,这样客户端浏览器中的cookie也会有一份和服务器端一模一样的字符串。这样每次掉接口,服务端通过拿到浏览器发送过来cookie中的这个字符串然后与原先存储字符串进行比较

举个最简单的粒子

超市会员卡功能。我们第一次去超市,超市免费送我们一张会员卡(假设一个人只能拥有一张会员卡),但是我们总是忘记带怎么办呢,我们可以挂个绳子在身上,然后将会员卡挂在绳子上,你每次去超市通过绳子就会自动携带这个会员卡。但是我们这个会员卡为了防止造假,超市在他们的机器上就存储了他们超市所有会员卡的卡号,你每次来超市都先进行刷卡,看看你的会员卡号是否已经在我们机器上存在,存在就代表是我们超市的会员卡,不存在当然就不是。
在这个例子中这个绳子就好比cookie,
我们之前说了,一个人只能拥有一个会员卡,所以一个人就对应一个会员卡号
而这个会员卡号就相当于session这个特殊得字符串。

补充:

我们平时说的cookie存储在客户端,说的是cookie存在于客户端,我们可以在cookie中存储东西。所以我们说的那些cookie存储在浏览器,而session这个字符串存储在服务端都是不准确的。
因为session是客户端与服务端进行鉴权的一个标识字符串。所以客户端与服务端都要保存一份儿。服务端将其保存在内存或者数据库或者其他地方中。客户端则将其保存在cookie中(因为每次调接口请求服务器都会自动将cookie中的所有数据携带到服务器)。这样调接口时服务端就能每次拿到用户客户端的session与自己服务端的session做比较了。这就是通过cookie加session实现鉴权的方式。

注意:

使用cookie必须保证调接口时候没有跨域问题,出现跨域问题,cookie则不会自动将内部数据携带到服务端

2.jwt

jwt就是使用token进行权限校验 ,token进行权限校验与cookie结合session进行权限校验 有两种不同。
1.如果出现跨域则不能使用cookie结合session进行权限校验,因为出现跨域时,cookie中的数据无法自动携带到服务器。而token则没有要求,因为token是需要用户手动添加到请求头中携带过去(当然你也可以放到cookie或者请求体中)。
2.token不用存储在服务端,token是通过一种插件根据用户的信息 加密之后得到的一串字符串,然后由服务器端发送给客户端,客户端自行保存,客户端每次掉接口需要自行添加到请求头携带给服务端。为什么服务器不用进行存储呢,因为我们之前说过是根据用户的信息进行加密,反之服务器每次拿到token时候也可以进行解密,然后判断解密后得到的用户信息

下图为jwt的处理方式
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值