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

一、介绍

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

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

  • cookie
  • session

二、身份验证

  1. 什么是身份认证

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

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

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

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

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

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

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

三、cookie

3.1 cookie 是什么

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

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

cookie 是按照域名划分保存的

简单示例:

Node学习笔记之会话控制(cookie和session)和JWT_第1张图片

3.2 cookie 的特点

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

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

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

4、cookie是基于域名安全的

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

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

3.3 cookie 的运行流程

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

Node学习笔记之会话控制(cookie和session)和JWT_第2张图片

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

Node学习笔记之会话控制(cookie和session)和JWT_第3张图片

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 的值通过响应头返回 给浏览器

Node学习笔记之会话控制(cookie和session)和JWT_第4张图片

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

Node学习笔记之会话控制(cookie和session)和JWT_第5张图片

五、在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 的工作原理

Node学习笔记之会话控制(cookie和session)和JWT_第6张图片

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

JWT 的组成部分

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

下面是 JWT 字符串的示例:

Node学习笔记之会话控制(cookie和session)和JWT_第7张图片

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

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

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

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

Node学习笔记之会话控制(cookie和session)和JWT_第8张图片

JWT 的使用方式

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

八、token

8.1 token 是什么

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

8.2 token 的作用

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

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

你可能感兴趣的:(Node学习,express,node.js,javascript,前端框架)