会话控制
讲会话控制的两种方式
介绍
所谓会话控制就是对会话进行控制
。
HTTP是一种无状态的协议,它没有办法区分多次的请求是否来自同一个客户端,无法区分用户
。
(无状态:客户端和服务端没有建立持续连接)
HTTP默认情况下不知道请求是谁发送的,不能区分用户,因此需要会话控制来解决该问题
。
但是在服务端要区分用户,根据用户返回用户的需要的信息。
常见的会话控制有三种:
- cookie
- session
- token
Cookie
Cookie是什么
-
cookie是HTTP服务器发送到用户浏览器并保存在
本地一小块数据
。 -
cookie是按照域名划分保存的。
不同的域名会有不同的cookie,不同域名的cookie并不互通。
Cookie特点
-
浏览器向服务器发送请求时,会自动将
当前域名下
可用cookie设置在请求头中,然后传递给服务器。 -
这个请求头名字叫
Cookie
,也可以将Cookie理解为HTTP的一个请求头。
-
作用:
Cookie
实现用户识别,对用户进行控制。
cookie的运行流程
用户填写账号和密码校验身份,校验后瞎发cookie。
浏览器操作cookie
1.禁用所有cookie
2.
代码操作cookie
express设置cookie
express删除cookie
express读取cookie
session
简介
- 定义:session是保存在
服务器
的数据,保存当前访问用户的相关信息。 - 作用:实现会话控制,识别用户身份,快速获取当前用户的相关信息。
session运行流程
- 用户填写账号密码校验身份,通过校验后服务器
创建session信息
,然后将session_id
的值通过响应头返回给浏览器。 - 有了cookie,用户下次发送请求时会自动携带cookie,服务器通过
cookie
中session_id
的值确定用户的身份。
使用的包
-
可以使用
express-session
包对session
进行操作。 -
这个包将信息存储到内存中,不方便进行操作。
解决方法:使用
connect-mongo
包,将session信息存储到mongodb数据库中。 -
这两个包使用前需要安装
npm i express-session connect-mongo
session的代码操作
session和cookie
- 存在位置
- cookie:存储在浏览器
- session:存储在服务端
- 安全性
- cookie:以明文的方式存储在客户端,安全性相对较低
- session:存放与服务器中,安全性
相对较好
- 网络传输量
- cookie:设置内容过多会增大报文体积,影响传输效率
- session:大部分数据存储在服务器,客户端的只通过cookie传递id,不影响传递效率
- 存储限制
- cookie:浏览器限制单个cookie保存的数据不能超过
4k
,且当域名下的存储数量也有限制 - session:数据存储在服务器中,所以没有这些限制
- cookie:浏览器限制单个cookie保存的数据不能超过
token介绍
token简介
- 定义:
token
是服务端生成并返回给HTTP客户端的一串加密字符串
,token
中保存着用户信息
。 - 作用:实现会话控制、用户识别,
主要用于移动端APP
。网页端session和cookie用的多。
token工作流程
创建时间:用户输入账号和密码,校验用户身份后;
服务器返回token给用户
用户再次发送请求时,
token需要程手动将token添加到请求报文中,一般是放在请求头中。
特点
-
服务端压力更小
- 数据保存在客户端,用户手机
-
相对更安全
- 数据加密
- 可以避免CSRF(
跨站请求伪造
)。因为不能自动携带,需要手动设置。
-
拓展性更强
- 服务间可以共享。一个Token,多个服务器之间共享。
- 增加服务节点更简单
JWT介绍和演示
JWT(JSON Web Token)是目前流行的跨域认证解决方案,可用于基于token
的身份验证。
JWT使token的生成与校验更规范。
需要的包:jsonwebtoken
包,使用npm安装。