用户权限校验的两种方式 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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TokenCookieSession 都是用于在客户端和服务器之间传递信息的方式,但是它们在实现和应用场景上有所不同。 1. TokenToken 是一种轻量级的身份验证和授权机制,通常使用 JWT(JSON Web Token)格式进行编码和传递。Token 是一种无状态的机制,不需要在服务器端保存任何信息,而是将认证和授权的信息编码为 Token,发送给客户端保存。客户端在后续请求中携带 Token服务器接收到请求后解码 Token,以验证用户身份和请求权限。由于 Token 的无状态特性,使得它可以被广泛使用于分布式系统中。 2. CookieCookie 是一种在客户端保存数据的机制,它是通过在客户端的浏览器中存储一些数据来实现的。Cookie 通常用于维持用户的会话状态,比如用户登录后,在后续的请求中都会带上 Cookie 信息,以便服务器判断用户的身份和请求权限Cookie 存在一些安全性问题,比如可以被窃取和篡改,因此需要采取一些安全措施,比如使用 HTTPS 协议传输。 3. SessionSession 是一种在服务器端保存用户会话信息的机制。当用户第一次访问服务器时,服务器会为用户创建一个 Session,生成一个 Session ID,并将 Session ID 保存在 Cookie 中,发送给客户端。客户端在后续请求中携带 Session ID,服务器接收到请求后根据 Session ID 获取用户的会话信息。Session 可以保存一些敏感信息,比如用户的登录状态、购物车信息等,因此需要采取一些安全措施,比如对 Session ID 进行加密和验证。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值