Node学习笔记之会话控制(cookie和session)和JWT

一、介绍

所谓会话控制就是 对会话进行控制 HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端, 无法区分用户

而产品中又大量存在的这样的需求,所以我们需要通过 会话控制 来解决该问题 常见的会话控制技术有两种:

  • cookie
  • session

二、身份验证

  1. 什么是身份认证

身份认证(Authentication)又称“身份验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。

⚫ 日常生活中的身份认证随处可见,例如:高铁的验票乘车,手机的密码或指纹解锁,支付宝或微信的支付密码等。

⚫ 在 Web 开发中,也涉及到用户身份的认证,例如:各大网站的手机验证码登录、邮箱密码登录、二维码登录等。

2不同开发模式下的身份认证

对于服务端渲染和前后端分离这两种开发模式来说,分别有着不同的身份认证方案:

① 服务端渲染推荐使用 Session 认证机制

② 前后端分离推荐使用 JWT 认证机制

三、cookie

3.1 cookie 是什么

cookie 是 HTTP 服务器发送到用户浏览器并保存在本地的一小块数据

cookie 是保存在浏览器端的一小块数据

cookie 是按照域名划分保存的

简单示例:

3.2 cookie 的特点

1、cookie由服务器生成,保存在浏览器端的一小段文本信息

2、cookie是以键和值得形式进行存储

3、浏览器在访问一个网站的服务器时,会自动在请求头中把和本网站相关的所有cookie发送给服务器

4、cookie是基于域名安全的

5、cookie有过期时间,默认关闭浏览器之后过期

浏览器向服务器发送请求时,会自动将 当前域名下 可用的 cookie 设置在请求头中,然后传递给服务器这个请求头的名字也叫cookie ,所以将cookie 理解为一个 HTTP 的请求头也是可以的

3.3 cookie 的运行流程

填写账号和密码校验身份,校验通过后下发 cookie

有了 cookie 之后,后续向服务器发送请求时,就会自动携带 cookie

3.4 浏览器操作 cookie

浏览器操作 cookie 的操作,使用相对较少,大家了解即可

  • 1. 禁用所有 cookie
  • 2. 删除 cookie
  • 3. 查看 cookie

四、session

4.1 session 是什么

session 是保存在 服务器端的一块儿数据 ,保存当前访问用户的相关信息

1、session数据保存在服务器端

2、session是以键和值的形式进行存储

3、session依赖于cookie,每个session信息对应的客户端的标识保存在cookie中

4.2 session 的作用

实现会话控制,可以识别用户的身份,快速获取当前用户的相关信息

4.3 session 运行流程

填写账号和密码校验身份,校验通过后创建session 信息 ,然后将session_id 的值通过响应头返回 给浏览器

有了 cookie,下次发送请求时会自动携带 cookie,服务器通过cookie中的session_id的值确定用 户的身份

五、在Node使用

5.1、cookie

下载依赖

npm i cookie-parser

注册到app中:

const cookieParase = require('cookie-parser');
app.use(cookieParase());

设置cookie:res.cookie('name', "node", {maxAge: 1000 * 60 * 60 * 2 });

获取cookie:let name = req.cookies["name"]

5.2、session

下载依赖

npm i cookie-session

注册到app中:

app.use(cookieSession({
    name:"my_session",  //name为session名,自己起一个字符串就行
    keys:["$^%%&^&%$RT%&TYGSGSFRR554785432$#@$$#%$@#%"],  // 内部加密需要的keys, keys为随机字符串
    maxAge: 1000 * 60 * 60 * 24   // 过期时间
}))

设置session:req.session["name"] = "session_node"

获取session:let name = req.session["name"]

六、session 和 cookie 的区别

cookie 和 session 的区别主要有如下几点:

1. 存在的位置

cookie:浏览器端

session:服务端

2. 安全性

cookie 是以明文的方式存放在客户端的,安全性相对较低

session 存放于服务器中,所以安全性 相对 较好

3. 网络传输量

cookie 设置内容过多会增大报文体积,会影响传输效率

session 数据存储在服务器,只是通过 cookie 传递 id,所以不影响传输效率

4. 存储限制 浏览器限制单个 cookie 保存的数据不能超过 4K ,且单个域名下的存储数量也有限制

session 数据存储在服务器中,所以没有这些限制

七、什么是 JWT

JWT(英文全称:JSON Web Token)是目前最流行的跨域认证解决方案。

JWT 的工作原理

总结:用户的信息通过 Token 字符串的形式,保存在客户端浏览器中。服务器通过还原 Token 字符串的形式来认证用户的身份。

JWT 的组成部分

JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效荷载)、Signature(签名)。 三者之间使用英文的“.”分隔,格式如下:

下面是 JWT 字符串的示例:

JWT 的三个部分各自代表的含义

JWT 的三个组成部分,从前到后分别是 Header、Payload、Signature。 其中:

⚫ Payload 部分才是真正的用户信息,它是用户信息经过加密之后生成的字符串。

⚫ Header 和 Signature 是安全性相关的部分,只是为了保证 Token 的安全性。

JWT 的使用方式

客户端收到服务器返回的 JWT 之后,通常会将它储存在 localStorage 或 sessionStorage 中。 此后,客户端每次与服务器通信,都要带上这个 JWT 的字符串,从而进行身份认证。推荐的做法是把 JWT 放在 HTTP 请求头的 Authorization 字段中,格式如下:

八、token

8.1 token 是什么

token是服务端生成并返回给 HTTP 客户端的一串加密字符串, token中保存着 用户信息

8.2 token 的作用

实现会话控制,可以识别用户的身份,主要用于移动端 APP

客户端每次在访问那些有权限接口的时候,都需要主动通过请求头中的 Authorization 字段,将 Token 字符串发 送到服务器进行身份认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值