Node 11会话控制

news2024/11/15 21:50:37

会话控制

介绍

所谓会话控制就是 对会话进行控制

HTTP 是一种无状态的协议,它没有办法区分多次的请求是否来自于同一个客户端,无法区分用户

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

常见的会话控制技术有三种:

  • cookie
  • session
  • token

cookie

cookie 是什么

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

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

cookie 是按照域名划分保存的

简单示例:

域名cookie
www.baidu.coma=100; b=200
www.bilibili.comxid=1020abce121; hm=112411213
jd.comx=100; ocw=12414cce

cookie 的特点

浏览器向服务器发送请求时,会自动将 当前域名下 可用的 cookie 设置在请求头中,然后传递给服务器

11_会话控制

这个请求头的名字也叫 cookie ,所以将 cookie 理解为一个 HTTP 的请求头也是可以的

cookie 的运行流程

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

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

image-20230327214554199

浏览器操作 cookie

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

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

cookie 的代码操作

express 中可以使用 cookie-parser 进行处理

const express =require('express');
//1. 安装 cookie-parser	 npm i cookie-parser
//2. 引入 cookieParser 包
const cookieParser = require('cookie-parser');
  
const app = express();

//3. 设置 cookieParser 中间件
app.use(cookieParser());
  
//4-1 设置 cookie
app.get('/set-cookie', (request, response) => {
	// 不带时效性    会在浏览器关闭的时候,销毁
	response.cookie('username','wangwu');
  	// 带时效性
  	response.cookie('email','23123456@qq.com', {maxAge: 5*60*1000 });
  	//响应
  	response.send('Cookie的设置');
});

//4-2 读取 cookie
app.get('/get-cookie', (request, response) => {
    //读取 cookie
    console.log(request.cookies);
  	//响应体
  	response.send('Cookie的读取');
});

//4-3 删除cookie
app.get('/delete-cookie', (request, response) => {
	//删除
	response.clearCookie('username');
	//响应
	response.send('cookie 的清除');
});

//4. 启动服务
app.listen(3000, () => {
	console.log('服务已经启动....');
});

不同浏览器中的 cookie 是相互独立的,不共享

session

session 是什么

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

session 的作用

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

session 运行流程

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

image-20230327222810111

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

image-20230327223550720

session 的代码操作

express 中可以使用 express-session 对 session 进行操作

const express = require('express');
//1. 安装包 npm i express-session connect-mongo
//2. 引入 express-session connect-mongo
const session = require("express-session");
const MongoStore = require('connect-mongo');

const app = express();

//3. 设置 session 的中间件
app.use(session({
	name: 'sid', //设置cookie的name,默认值是:connect.sid
	secret: 'atguigu', //参与加密的字符串(又称签名)  加盐
	saveUninitialized: false, //是否为每次请求都设置一个cookie用来存储session的id
	resave: true, //是否在每次请求时重新保存session
	store: MongoStore.create({
		mongoUrl: 'mongodb://127.0.0.1:27017/project' //数据库的连接配置
	}),
	cookie: {
		httpOnly: true, // 开启后前端无法通过 JS 操作
		maxAge: 1000 * 300 // 这一条 是控制 sessionID 的过期时间的!!!
	},
}))

//创建 session  session的设置
app.get('/login', (req, res) => {
    //设置session
    req.session.username = 'zhangsan';
    req.session.email = 'zhangsan@qq.com'
    res.send('登录成功');
})

//获取 session
app.get('/home', (req, res) => {
    console.log('session的信息');
    console.log(req.session.username);
    // 检测 session 是否存在用户数据
    if (req.session.username) {
    	res.send(`你好 ${req.session.username}`);
    }else{
    	res.send('登录 注册');
    }
})

//销毁 session
app.get('/logout', (req, res) => {
    //销毁session
    // res.send('设置session');
    req.session.destroy(() => {
    	res.send('成功退出');
	});
});
app.listen(3000, () => {
	console.log('服务已经启动, 端口 ' + 3000 + ' 监听中...');
});

session 和 cookie 的区别

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

  1. 存在的位置
  • cookie:浏览器端
  • session:服务端
  1. 安全性
  • cookie 是以明文的方式存放在客户端的,安全性相对较低
  • session 存放于服务器中,所以安全性 相对 较好
  1. 网络传输量
  • cookie 设置内容过多会增大报文体积, 会影响传输效率
  • session 数据存储在服务器,只是通过 cookie 传递 id,所以不影响传输效率
  1. 存储限制
  • 浏览器限制单个 cookie 保存的数据不能超过 4K ,且单个域名下的存储数量也有限制
  • session 数据存储在服务器中,所以没有这些限制

token

token 是什么

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

token 不属于 http 标准,完全由前后端协商而定,但 cookie 属于 http 标准

token 的作用

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

token 的工作流程

填写账号和密码校验身份,校验通过后响应 token,token 一般是在响应体中返回给客户端的

image-20230328135106885
后续发送请求时,需要手动将 token 添加在请求报文中(cookie是自动携带的),一般是放在请求头中
image-20230328135122945

token 的特点

  • 服务端压力更小
    • 数据存储在客户端
  • 相对更安全
    • 数据加密
    • 可以避免 CSRF(跨站请求伪造)
  • 扩展性更强
    • 服务间可以共享
    • 增加服务节点更简单

JWT

JWT(JSON Web Token )是目前最流行的跨域认证解决方案,可用于基于 token 的身份验证

JWT 使 token 的生成与校验更规范

我们可以使用 jsonwebtoken 包 来操作 token

//导入 jsonwebtokan
const jwt = require('jsonwebtoken');

//创建 token
// jwt.sign(数据, 加密字符串, 配置对象)
let token = jwt.sign({
    username: 'zhangsan'
}, 'atguigu', {
    expiresIn: 60 //单位是 秒
})

//解析 token
// jwt.verify(token,加密字符串,回调函数)
jwt.verify(token, 'atguigu', (err, data) => {
    if(err){
    	console.log('校验失败~~');
	    return
	}
	console.log(data);// { username: '张三', iat: (创建时间), exp:(过期时间)}
})

扩展阅读: https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

附录

本地域名

所谓本地域名就是 只能在本机使用的域名,一般在开发阶段使用

操作流程

编辑文件 C:\Windows\System32\drivers\etc\hosts

127.0.0.1   www.baidu.com

如果修改失败,可以修改该文件的权限

11_会话控制

原理

在地址栏输入 域名 之后,浏览器会先进行 DNS(Domain Name System)查询,获取该域名对应的 IP 地

请求会发送到 DNS 服务器,可以 根据域名返回 IP 地址

可以通过 ipconfig /all 查看本机的 DNS 服务器

hosts 文件也可以设置域名与 IP 的映射关系,在发送请求前,可以通过该文件获取域名的 IP 地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT被淘汰了?Auto-GPT到底有多强

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了,显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API,某种意义只是基于ChatGPT能力的应用。但最近,Auto…

大型央企集团财务经营分析框架系列(二)

01集团化的数字化项目为什么会失败深度原因:方向性错误 这几年见过一些央企、国企、大型企业集团尝试过一些数字化的项目:数据中台、大数据分析、BI 分析项目,投入很大、周期也很长,甚至有的在项目开始前也找了专业的咨询公司来规…

按键外部中断

文章目录 运行环境:1.1 按键外部中断1)按键检测2)外部中断的3中触发方式 2.1配置1)原理图2)引脚配置3)中断配置4)RCC和SYS 3.1代码分析3.2添加代码1)中断处理函数IRQ中添加电平转换代码2)launch设置 5.1实验效果 运行环境: ubuntu18.04.melodic 宏基暗影…

如何用ChatGPT做团队绩效管理?根据员工的个人优势、不足、目标来生成更具体的绩效反馈

该场景对应的关键词库:(25个) 绩效管理、目标设定、绩效评估、员工优势、员工弱点、反馈机制、个人发展计划、职业规划、评估工具、数据分析、绩效考核、评分标准、KPI指标、成果目标、个人任务、团队任务、激励机制、晋升机会、增量奖励、培…

你的个人AI助理Pi来了

还记得之前的文章《不要老盯着ChatGPT,这几家公司的产品同样不容小觑》提到的Inflection AI公司吗?通过其官方推文了解到,前期我们关注的个人AI助理有了新的进展,Pi开始对外发布。 Pi是什么 Pi 是一种 AI,一种旨在提供…

使用crontab定时自动更新DDNS

需求说明: N1盒子的armbian系统配置好了 ipv6 的ddns,实现了域名访问本机,但是本地ipv6可能会发生变化,当发生变化后,需要手动执行指令,将新的ip与域名绑定,现在我们采用定时任务,每…

18 线性表的查找

查找的基本概念 **查找:**在数据集合中寻找满足某种条件数据元素的过程,称之为查找。 查找的结果 分别两种: 查找成功 即在数据集合中找到了满足条件的数据元素。查找结果给出整个记录的信息,或者改记录在查找表中的位置。查找失…

vivo积分任务体系的架构演进-平台产品系列05

作者:vivo 互联网平台产品研发团队- Mu JunFeng 积分体系作为一种常见营销工具,几乎是每一家企业会员营销的必备功能之一,在生活中随处可见,随着vivo互联网业务发展,vivo积分体系的能力也随之得到飞速提升,…

Java字符串的用法、原理、性能分析和总结

本文介绍了Java字符串的创建方式、拼接、比较、查找和替换等常见操作,并解析了Java字符串在内存中的存储方式及常量池的作用。文章还提到了Java字符串的性能问题,建议在进行大量的字符串操作时,应该尽量避免使用""号操作符和concat…

【模拟IC学习笔记】 Widlar电流源

原理分析 M3、M4工作在饱和区,M1、M2可以工作在饱和区也可以工作在亚阈值区。 两边电流相等,M3、M4尺寸相等,Vgs2<Vgs1,所以M2的尺寸应该比M1的尺寸大才能保证两边电流相等。K为M2和M1的尺寸比。 当M1和M2工作在饱和…

springboot集成Validated实现参数检验,分组校验,嵌套检验等

一&#xff0c;开发前工作 引入依赖 <dependency> <!--新版框架没有自动引入需要手动引入--><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 二&#xff0c…

spring之ioc初见

maven创建 mvn archetype:generate # 选择7&#xff0c;创建快速启动项目然后idea打开即可 idea创建 点击创建 使用IOC pom.xml添加依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><…

pytorch实战9:基于pytorch简单实现u-net

基于pytorch简单实现u-net 前言 ​ 最近在看经典的卷积网络架构&#xff0c;打算自己尝试复现一下&#xff0c;在此系列文章中&#xff0c;会参考很多文章&#xff0c;有些已经忘记了出处&#xff0c;所以就不贴链接了&#xff0c;希望大家理解。 ​ 完整的代码在最后。 本系列…

组件等比例放大——scale和zoom

scale和zoom的区别 zoom的缩放是相对于左上角的&#xff1b;而scale默认是居中缩放&#xff0c;可以通过transform-origin修改基准点zoom的缩放改变了元素占据的空间大小&#xff1b;而scale的缩放占据的原始尺寸不变&#xff0c;页面布局不会发生变化。对文字的缩放规则不一致…

K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

文章目录 一、部署K8S集群方式二、kubeadm工具搭建K8s集群2.1 资源配置2.2 服务器规划2.3 搭建流程2.3.1 操作系统初始化2.3.2 安装docker容器引擎2.3.3 安装cri-dockerd2.3.4 安装kubeadm&#xff0c;kubelet和kubectl2.3.5 master节点初始化2.3.6 加入node节点2.3.7 部署网络…

《花雕学AI》29:5秒钟就能为你的想法想出新点子?ChatGPT新点子指令模型告诉你怎么做

引言 你有没有遇到过这样的情况&#xff0c;你想出了一个想法&#xff0c;但是不知道怎么扩展或改进它&#xff1f;你有没有想过有一个工具&#xff0c;可以帮你在短时间内为你的想法生成各种新的点子&#xff1f;如果你有这样的需求&#xff0c;那么你一定要了解ChatGPT。 C…

Verilog 锁相环参数动态自动生成,Xilinx MMCM 和 PLL 动态配置频率

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a;https://blog.csdn.net/qq_46621272/article/details/130484100 Verilog 锁相环参数动态自动生成&#xff0c;Xilinx MMCM 和…

服务器中了勒索病毒,升级后的Malox勒索病毒特征,勒索病毒解密数据恢复

Mallox勒索病毒是网络上较为流行的勒索病毒&#xff0c;但是随着黑客加密技术的不断升级&#xff0c;Mallox勒索病毒的新升级版本Malox勒索病毒已经开始出现。Malox勒索病毒是一种最近在网络上广泛传播的恶意软件&#xff0c;其感染方式多种多样&#xff0c;主要以加密受害人的…

【五一创作】版本控制-从零开始学Git-02 Git中的基本概念与工作流程

前言 前面学习了版本控制系统和分布式版本控制系统-Git的相关入门知识【五一创作】版本控制-从零开始学Git-01什么是Git 一、Git中的最基本概念 注意:.git目录是一个隐藏文件夹&#xff0c;默认不可见,需要设置后才能显示出来。 二、Git状态与结构关系 2.1 三种状态 modif…

Zigbee 无线串口通信模块( DL-22 )

文章目录 一、DL-22简介二、模块配置三、串口通信(透明传输) 一、DL-22简介 DL-22无线串口模块为串口转2.4G无线模块&#xff0c;可以通过无线将两个或者多个串口连接起来。串口发入模块的数据会被模块使用无线发出&#xff0c;收到无线数据的模块会将这个数据使用串口发出&am…