九、会话控制——cookie、session、token

news2024/12/23 17:40:47

文章目录

  • 前言
  • 一、cookie
    • 1.1 cookie 是什么
    • 1.2 cookie 的特点
    • 1.3 cookie 的运行流程
    • 1.4 express 框架中设置cookie
    • 1.5 express 框架中删除cookie
    • 1.6 express 框架中获取cookie
  • 二、session
    • 2.1 session 是什么
    • 2.2 session 的作用
    • 2.3 session 的运行流程
    • 2.4 session 和 cookie 的区别
  • 三、token
    • 3.1 token 是什么
    • 3.2 token 的作用
    • 3.3 token 的工作流程
    • 3.4 token 的特点
    • 3.5 JWT


前言

HTTP是一种无状态协议,它没有办法区分多次的请求是否来自于同一个客户端,无法区分用户。而产品中又大量存在这样的需求,所以我们需要通过会话控制来解决问题。
常见的会话控制有三种:
(1)cookie
(2)session
(3)token


一、cookie

1.1 cookie 是什么

cookie 是HTTP服务器发送到用户浏览器并保存在本地的一小块数据。
cookie 是保存在浏览器端的一小块数据
cookie 是按照域名划分保存的

1.2 cookie 的特点

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

1.3 cookie 的运行流程

填写账号和密码校验身份,校验通过后下发cookie
在这里插入图片描述
有了cookie之后,后续向服务器发送请求时,会自动携带cookie
在这里插入图片描述

1.4 express 框架中设置cookie

// 导入express
const express=require('express');

// 创建应用对象
const app =express();

// 创建路由规则
app.get('/set-cookie',(req,res)=>{
    // res.cookie('name','zhangsan'); // 会在浏览器关闭的时候销毁
    res.cookie('name','list',{maxAge:60*1000}) // max 最大 age 年龄
    res.send('home');
});

// 启动服务
app.listen(3000);

1.5 express 框架中删除cookie

// 导入express
const express=require('express');

// 创建应用对象
const app =express();

// 创建路由规则
app.get('/set-cookie',(req,res)=>{
    // res.cookie('name','zhangsan'); // 会在浏览器关闭的时候销毁
    res.cookie('name','list',{maxAge:60*1000}) // max 最大 age 年龄
    res.cookie('theme','blue');
    res.send('home');
});

// 删除cookie
app.get('/remove-cookie',(req,res)=>{
    // 调用方法
    res.clearCookie('name');
    res.send('删除成功');
})

// 启动服务
app.listen(3000);

1.6 express 框架中获取cookie

使用cookie-parser

// 导入express
const express=require('express');
// 导入包
const cookieParser=require('cookie-parser')

// 创建应用对象
const app =express();
app.use(cookieParser());

// 创建路由规则
app.get('/set-cookie',(req,res)=>{
    // res.cookie('name','zhangsan'); // 会在浏览器关闭的时候销毁
    res.cookie('name','list',{maxAge:60*1000}) // max 最大 age 年龄
    res.cookie('theme','blue');
    res.send('home');
});

// 获取cookie
app.get('/get-cookie',(req,res)=>{
    // 获取cookie
    console.log(req.cookies);
    res.send('获取cookie');
})

// 启动服务
app.listen(3000);

二、session

2.1 session 是什么

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

2.2 session 的作用

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

2.3 session 的运行流程

浏览器端填写账号和密码传给服务器校验身份,服务器校验通过后创建session信息,然后将session_id的值通过响应头返回给浏览器。浏览器有了cookie,下次发送请求时会自动携带cookie,服务器通过cookie中的session_id的值确定用户的身份。

2.4 session 和 cookie 的区别

(1)存在的位置
· cookie:浏览器端
· session:服务端

(2)安全性
· cookie是以明文的方式存放在客户端的,安全性相对较低
· session存放于服务器中,所以安全性相对较好

(3)网络传输质量
· cookie设置内容过多会增大报文体积,会影响传输效率
· session数据存储在服务器,只是通过cookie传递id,所以不影响传输效率

(4)存储限制
· 浏览器限制单个cookie保存的数据不能超过4k,且单个域名下的存储数量也有限制
· session 数据存储在服务器中,所以没有这些限制

三、token

3.1 token 是什么

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

3.2 token 的作用

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

3.3 token 的工作流程

填写账号和密码校验身份,校验通过后响应token,token一般是在响应体中返回给客户端的
在这里插入图片描述
后续发送请求时,需要手动将token添加在请求报文中,一般是放在请求头中,cookie为自动携带
在这里插入图片描述

3.4 token 的特点

(1)服务器端压力更小
--------数据存储在客户端

(2)相对更安全
--------数据加密
--------可以避免CSRF(跨站请求伪造)

(3)扩展性更强
--------服务间可以共享
--------增加服务节点更简单

3.5 JWT

JWT(JSON Web Token)是目前最流行的跨域认证解决方案,可用于基于token的身份验证
JWT使token的生成与校验更规范
我们可以使用JWT包来操作token,使用前先安装包:npm i jsonwebtoken

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

// 1. 创建(生成)token
// let token = jwt.sign(用户数据,加密字符串,配置对象);
let token=jwt.sign({
    username:'zhangsan'
},'aaaaaa',{
    expiresIn:60, // 单位是秒
})
console.log(token)

let t='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InpoYW5nc2FuIiwiaWF0IjoxNjg2Nzk1ODA5LCJleHAiOjE2ODY3OTU4Njl9.KRZxCJFb9ry5vVL2w-n6tvqaG8JQrPqp8Ej0BwT6myM'

// 校验 token
jwt.verify(t,'aaaaaa',(err,data)=>{
    if(err){
        console.log('校验失败');
        return
    }
    console.log(data);
})

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

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

相关文章

vue框架一

目录 友情提醒第一章、vue框架是前端js框架1.1)介绍vue1.2)vue设计思想1.3)vue引入 第二章、实现的步骤2.1)创建步骤2.2)基本语法2.3) 第三章、遇到的问题3.1)3.2)3.3) 第…

python grpc状态码用法

测试代码 新建demo.proto文件定义协议缓冲区,写入以下内容: syntax "proto3"; package server;service Demo {rpc ping(Request) returns (Response) {} }message Request {string msg 1;} message Response {string msg 1;}使用gRPC的工…

百兆网和千兆网怎么接线

一、认识网线 网线:橙色和白橙交织在一起,绿色和白绿交织在一起,棕色和白棕交织在一起,蓝色和白蓝交织在一起。在传输电信号时,相互之间辐射出的电磁波会相互抵消,可以消除相互之间的干扰,所以…

shell脚本进阶1——精读ansible+shell脚本

文章目录 一、脚本规划思路二、主控机shell脚本2.1 脚本输出字体特效2.2 生成菜单栏对话框2.3 配置本地yum源仓库2.4 配置受控机yum源2.5 关闭防火墙和selinux2.6 把docker安装包给受控机2.7 安装docker-compose2.8 安装docker2.9 安装ansible2.10 安装pip2.11 主控本机免密登录…

JAVA并发十二连招

1、HashMap 面试第一题必问的 HashMap,挺考验Javaer的基础功底的,别问为啥放在这,因为重要!HashMap具有如下特性: HashMap 的存取是没有顺序的。 KV 均允许为 NULL。 多线程情况下该类安全,可以考虑用 Ha…

JavaFx Shape形状

JavaFx Shape形状 1、相关子类2、屏幕坐标系3、JavaFx SVG矢量图4、Polygon箭头形状 javafx.scene.shape.Shape 1、相关子类 javafx.scene.shape.Linew3cschool JavaFX 线javafx.scene.shape.Rectanglew3cschool JavaFX 矩形椭圆javafx.scene.shape.Ellipsejavafx.scene.shap…

开源办公套件 ONLYOFFICE文档7.4新功能

随着现代办公的信息化发展,我们处理文档时,对在线协作的需求也越来越大。选择一款简单高效、免费又无广告弹窗的办公套件便非常重要。除了昂贵的微软Office,太多广告的WPS,你还有另一个选择:ONLYOFFICE。 什么是 ONLY…

论程序员提问的艺术

最近工作比较忙,加上空闲时间大部分都是在维护开发【云狗AI】,所以也有一段时间没更新视频了,有不懂的,也可以问一下【云狗AI】以后我也会花更多的时间在维护这个项目中。争取给大家带来更好的体验。 主要是因为最近没发现什么特…

播放WebRTC开源库回调出来的视频码流时遇到的内存越界问题排查

目录 1、执行memset操作时遇到了内存访问违例,导致程序崩溃 2、查看崩溃时的函数调用堆栈,初步怀疑是memset时有内存越界 3、存放YUV数据的buffer在执行若干操作后出现内存越界 4、加载系统库的pdb之后,看到了更多的函数调用堆栈&…

代码随想录二刷 day23 | 二叉树 之 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

二刷day23 669. 修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树 669. 修剪二叉搜索树 题目链接 解题思路: 递归三部曲 确定递归函数的参数以及返回值 这里我们为什么需要返回值呢? 因为是要遍历整棵树,做修改…

SOLIDWORKS Electrical如何绘制电线

SOLIDWORKS Electrical 是一套计算机辅助工程 (CAE) 设计工具,他可以帮助电气设计工程师减少创新的内在风险,并允许公司减少对物理原型的需求,从而在更短时间内以更低成本将产品推向市场。通过一组强大、直观的电气设计功能,设计人…

互联网大佬们的成功绝非偶然

以下排名不分先后。 一、百度李彦宏 ,1987年阳泉市高考状元,考进北大。 互联网三巨头BAT的第一个字母,指的就是百度。创始人李彦宏是出生在普通家庭出生,他小时候的启蒙教育由三个姐姐负责,不过相比学习,更…

详解国产指纹芯片的工作原理以及应用领域

指纹芯片,是指内嵌指纹识别技术的芯片产品,能够片上实现指纹的图像采集、特征提取、特征比对的芯片,开发者可以方便的实现指纹识别的功能,大大降低了指纹识别行业的门槛,对指纹识别的推广具有十分积极的推动作用。 近几…

数据合规之监管关注要点暨风险防范建议

上市申报过程中证券监督部门最关注的三类问题为数据源合规、数据安全及数据使用合规,而这三类问题也是企业运营时最容易产生的问题,它们无疑应是拟上市企业数据合规治理的重中之重: 1、数据源合规之监管关注要点 1、数据信息 就获取的个人数…

RaaS(勒索软件即服务)是什么?这个模型是如何工作的?

Ransomware as a Service是一个英语术语,指的是一种商业模型,其中勒索软件开发者向感兴趣的恶意行为者提供工具,以便他们可以发起勒索软件攻击。使用者通过签约创建恶意软件即服务或加入联盟计划,并分发一系列勒索软件以换取一定比例的利润。…

字符串--字符串处理函数、向函数传递字符串

一、字符串处理函数 字符串处理函数库提供了很多有用的函数用于字符串处理操作&#xff08;如复制字符串和拼接字符串等&#xff09;以及确定字符串的长度。若要使用这些字符串处理函数&#xff0c;必须在程序的开头将头文件<string.h>包含到源头文件。 例题1&#xff1a…

什么是Vue的前端微服务架构(Micro Frontends)?

什么是Vue的前端微服务架构&#xff08;Micro Frontends&#xff09;&#xff1f; 前端微服务架构&#xff08;Micro Frontends&#xff09;是一种新型的前端架构风格&#xff0c;它借鉴了后端微服务架构的思想&#xff0c;将前端应用程序拆分为多个小型、独立的部分&#xff…

系统学习Spring,阿里最新产Spring全家桶进阶笔记真的很全

Spring是我们Java程序员面试和工作都绕不开的重难点。很多粉丝就经常跟我反馈说由Spring衍生出来的一系列框架太多了&#xff0c;根本不知道从何下手&#xff1b;大家学习过程中大都不成体系&#xff0c;但面试的时候都上升到源码级别了&#xff0c;你不光要清楚了解Spring源码…

混沌演练状态下,如何降低应用的MTTR(平均恢复时间) | 京东云技术团队

在企业业务领域&#xff0c;锦礼是针对福利、营销、激励等员工采购场景的一站式解决方案&#xff0c;包含面向员工、会员等弹性激励SAAS平台。由于其直接面向公司全体员工&#xff0c;其服务的高可用尤其重要&#xff0c;本文将介绍锦礼商城大促前夕&#xff0c;通过混沌工程实…

vue3 项目部署,Nginx配置https,重定向,详细流程

文章目录 前情提要应用场景安装使用 实战解析最后 前情提要 一个web项目完成后&#xff0c;我们需要打包部署上线&#xff0c;关于打包的实战在我的vite专栏里已经有过一些实践&#xff0c;今天我们来实践一些部署的过程&#xff0c;当然部署也可以由后端来完成&#xff1b; 应…