cookie、session、JWT鉴权分类总结

cookie、session、JWT鉴权分类总结:

在一次会话中,可以向服务器发出N次请求。通过某个机制,可以让服务器和客户端建立联系。这种机制叫会话机制。在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session)。其中,cookie是基于浏览器端的会话技术,session是基于服务端的会话技术。session通常都会依赖cookie。

一、cookie浅析:

存在于客户端,当用户正确登陆后服务器就会在用户的浏览器上种植了cookie,里边包含用户信息,方便再一次登录时服务器识别身份,并返回用户信息。可以设置每个cookie存活的时间

Cookie的格式中,有一个expiress,就是用来设置有效期的。
maxAge用法更加简单,推荐使用。

<script>
res.cookie("username","jack",{
     
     maxAge:90000});//用户名,存活时间9s
res.cookie("username","jack",{
     
     expiress:new Date(Date.now()+90000)})
</script>

缺点:1)不是很安全,用户可以随意修改cookie里的内容。
2)保存的数据大小有限制,每个浏览器保存的cookie多少也有限制。
3)如果客户端设置禁止cookie则cookie不能建立。

二、session浅析:

session数据存放于服务器上,当用户第一次登录成功时,服务器自动生成一个session,一个唯一的标识session-id将会被创建并响应给客户端,之后的每次请求服务器客户端都会带上session-id,以便于服务器识别身份。当然session也是基于cookie的,创建的唯一标识是储存于本地的cookie中 ,如果不设置过期时间那么这个cookie将不存放在硬盘上,当浏览器关闭的时候就消失,session-id也就丢失了,如果设置存活时间,则cookie就会保存在客户端硬盘中,即使浏览器关闭,下次访问session-id依然存在,使用session需要配置。

服务器可以通过URL重写的方式来传递session-id的值,不完全依赖cookie,如果客户端禁用cookie,服务器也是可以通过URL的方式来保存session的值。

使用session:引入express-session(一个插件)并设置如下

<script>
let session = require('express-seeeion')
let app = express();
app.use(session({
     
     
	secret:'keyboard cat'//密钥
	resave:false,
	saveUninitialized:teue,
	cookie:{
     
     maxAge:100000}
}))
</script>

缺点:1)session会一定时间的保存在服务器上边,当访问增多时,比较占用服务器的性能
2)一般情况下服务器默认保存session30分钟,过了时间就会自动销毁。
3)如果客户端设置禁止cookie则cookie不能建立。
4)扩展性,哪怕session以文件形式保存 放在redis中,对于分布式系统来说会产生高流量的数据读取。
5)容易受到csrf攻击

三、JWT鉴权浅析:

以token的方式代替传统的session-cookie模式,用于服务器,客户端传递信息给服务器。
客户端第一次成功登录后,服务器会返回一个token给客户端,客户端将响应得到的token缓存起来,比如存放在浏览器的local stroage中,之后的每次请求都会携带上token,让服务器验证。

优点:1)jwt不用session,减小开支。
2)jwt构成简单,占用很少字节。
3)json格式通用。

<script>
let jwt = require('jsonwebtoken');//引入jwt模块
let app = express();
let secretKey = "asd";//定义密钥
let tokenstr = jwt.sing({
     
     username:userInfo.username},secretKey,{
     
     expresIn:'120s'})//生成token  在发送请求时把token放在请求头header上可以保证每次客户端向服务器发送请求时都有token,以便服务器识别。
</script>

在请求头上加入:Authorize:bearer token即可。

猜你喜欢

转载自blog.csdn.net/Fairyasd/article/details/108291075