Session 与 JWT 的对决:谁是身份验证的王者? (下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6
🍨 阿珊和她的猫_CSDN个人主页
🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》
🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》
文章目录
- 四、Session 与 JWT 的比较
- 对比 Session 与 JWT 在身份验证和授权方面的区别
- 分析 Session 与 JWT 在性能、安全性和扩展性方面的差异
- 讨论在不同场景下选择 Session 或 JWT 的考虑因素
- 五、使用 Session 与 JWT 的实践
- 提供使用 Session 与 JWT 的实际案例
- 六、结论
- 总结 Session 与 JWT 的特点和适用场景
四、Session 与 JWT 的比较
对比 Session 与 JWT 在身份验证和授权方面的区别
Session 和 JWT(JSON Web Token)是常用于身份验证和授权的两种不同的机制。
Session:
- 在服务器端存储用户的会话信息,该会话信息由服务器生成一个唯一的会话标识符(Session ID)来标识。
- 当用户登录后,服务器会创建一个会话对象,并将会话 ID 返回给客户端(通常存储在 Cookie 中)。
- 客户端发送请求时,会将会话 ID 随请求一起发送到服务器。
- 服务器根据接收到的会话 ID 从存储中找到对应的会话对象,并验证用户的身份。
- 服务器可以在会话对象中存储用户的身份信息和其他相关数据。
- 会话对象通常存储在服务器的内存中或持久化存储中(如数据库)。
JWT (JSON Web Token):
- 在服务器端生成一个 JSON 格式的令牌以表示用户的身份和其他相关数据。
- 令牌包含了用户的身份信息和其他声明(声明可以包含用户角色、权限等)。
- 服务器将令牌签名后发送给客户端。
- 客户端在后续请求中将令牌携带在请求头中或其他可靠的方式发送给服务器。
- 服务器接收到令牌后,可以验证令牌的签名,并解析其中的数据以获取用户的身份信息。
- 由于令牌包含了用户的身份信息和声明,服务器可以避免频繁访问存储(如数据库)来验证用户身份和权限。
区别:
- 存储状态:Session 会话信息存储在服务器端,JWT 令牌存储在客户端。
- 扩展性:Session 需要服务器在内存或数据库中保存会话信息,当用户数量增多时,需要更多的存储资源。JWT 令牌包含了用户信息和声明,服务器可以避免频繁访问存储,使得系统更容易扩展。
- 无状态性:Session 依赖服务器的状态来验证用户身份,需要在服务器端保存会话状态。而 JWT 是无状态的,服务器可以直接解密和验证令牌,无需保存任何状态信息。
- 跨域通信:由于 JWT 存储在客户端,可以轻松地在不同域名的服务器之间传递,而 Session 则需要处理跨域通信的问题。
- 时效性:Session 的有效期由服务器控制,可以设置较短的时间以提高安全性,但可能导致用户需要频繁重新登录。JWT 可以包含令牌的过期时间,客户端可据此判断是否需要刷新令牌。
选择哪种机制应根据具体的需求和安全性要求来决定。一般而言,JWT 更容易在分布式系统中实现和扩展,适合于无状态的、跨域的、具有较长有效期的身份验证和授权需求;而 Session 适用于相对简单的应用或需要较强的安全性控制的场景。
分析 Session 与 JWT 在性能、安全性和扩展性方面的差异
Session 和 JWT 在性能、安全性和扩展性方面存在一些差异。以下是它们之间的比较:
性能:
- Session:由于 Session 信息存储在服务器端,每当客户端发送请求时,服务器都需要查找和读取相应的 Session 数据。这可能会对服务器的性能造成一定的影响,特别是在高并发的情况下。
- JWT:由于 JWT 是无状态的,服务器不需要在存储中查找和读取用户的会话数据。服务器可以直接验证和解析 JWT,这有助于提高性能,尤其是在分布式系统中。
安全性:
- Session:Sessions 机制可以提供相对较高的安全性。因为 Session 数据存储在服务器端,对客户端来说是不可见的,因此难以被篡改。同时,可以使用传输安全层协议(如 HTTPS)保护会话标识符的传输,防止劫持和窃听。
- JWT:JWT 的安全性取决于密钥的保护和签名算法的强度。如果密钥泄露或算法被破解,攻击者可能能够伪造令牌获取访问权限。另外,由于 JWT 是存储在客户端的,如果在令牌中包含敏感信息(如密码),则可能会存在泄露风险。
扩展性:
- Session:由于 Session 存储在服务器端,因此在处理大量并发请求时,需要管理和维护多个会话对象,这可能对服务器的可扩展性带来一些挑战。
- JWT:由于 JWT 是无状态的,不需要在服务器端存储会话数据,这样可以更容易地在分布式系统中实现和扩展。JWT 适用于具有高度可扩展性需求的系统。
总体而言,JWT 在性能和扩展性方面具有优势,尤其适用于分布式系统。然而,安全性方面需要注意保护密钥的安全性,并避免在令牌中包含敏感信息。Session 在安全性方面相对更可靠,但对服务器性能和可扩展性具有一定的影响。因此,在选择使用 Session 还是 JWT 时,需要综合考虑具体的应用场景和安全需求。
讨论在不同场景下选择 Session 或 JWT 的考虑因素
在选择 Session 或 JWT 时,需要根据具体的应用场景和需求来综合考虑多个因素,以下是几个常见场景和对应的考虑因素:
- 单一服务器应用场景:
在单一服务器应用场景下,Session 是一个比较成熟、可靠和易于维护的方案。因为在单一服务器下管理 Session 的性能不是问题,也能够通过存储 Session 数据来进行有效的身份验证和授权
。在这种场景下,Session 可以提供更好的安全性保障,也能够更容易地控制会话的有效期。但是,这种方案有一个显著的局限性,那就是在使用不同的服务器节点时会失去 Session 的状态信息,需要采取特殊的机制来在多个服务器之间同步和共享 Session 数据。
- 分布式应用场景:
在分布式应用场景下,每个服务器都可以独立地验证和授权用户,因此 Session 的优点在这种情况下就不是很显著。相比之下,JWT 是一种更适合分布式架构的解决方案。由于 JWT 包含了用户信息和声明,它们可以在不同的服务器之间交换和传递,从而解决了 Session 在跨服务器交换数据时的局限性问题。
另外,由于 JWT 是无状态的,服务器可以更容易地扩展,而无需担心会话数据的同步和共享问题。
- 跨平台的应用场景:
在跨平台的应用场景下,Session 可能会出现各种问题,比如搜索引擎爬取,浏览器升级缓存问题等。另外,对于使用移动应用程序或公共 API 的用户来说,将 Session 数据存储在客户端或浏览器中可能会有安全问题。相比之下,JWT 可以更方便地传递和使用,同时也没有跨平台问题
。由于 JWT 以 JSON 格式表示,因此可以作为 API 的常规响应格式,能更容易地被跨平台响应,从而更容易地实现 API 调用和数据交换。
总之,在决定使用 Session 还是 JWT 时,我们需要考虑因素包括:性能、安全性和可扩展性等,同时也要根据具体的应用场景和需求来进行评估和选择。
五、使用 Session 与 JWT 的实践
提供使用 Session 与 JWT 的实际案例
以下是使用 Session 与 JWT 的实际案例:
一、使用 Session 的实际案例
-
传统的 Web 应用程序:许多传统的 Web 应用程序使用 Session 来管理用户会话。当用户登录时,服务器会创建一个 Session,并将一个唯一的 Session ID 发送给用户的浏览器。在后续的请求中,浏览器会将 Session ID 发送给服务器,服务器通过该 ID 来识别用户的会话。
-
购物车示例:在电子商务网站中,Session 可以用于存储用户的购物车信息
。当用户添加商品到购物车时,服务器会将商品信息存储在 Session 中。在用户查看购物车或进行结账时,服务器可以从 Session 中获取购物车的内容。
二、使用 JWT 的实际案例
-
API 访问控制:JWT 常用于 API 访问控制。客户端在进行 API 请求时发送 JWT,服务器通过验证 JWT 的签名和其中的声明来确定客户端是否有权访问该 API 资源。
-
单点登录(Single Sign-On,SSO)系统:JWT 可以用于实现单点登录
。在 SSO 系统中,用户在一个身份提供者(Identity Provider,IDP)上进行身份验证,然后获取一个包含身份信息的 JWT。之后,用户可以将这个 JWT 发送给多个服务提供者(Service Provider,SP),而无需再次进行身份验证。SP 可以通过验证 JWT 的签名来确认用户的身份。
这些只是使用 Session 与 JWT 的一些实际案例,实际上,Session 和 JWT 在许多其他场景中也有广泛的应用。具体的使用取决于应用的需求和设计。
六、结论
总结 Session 与 JWT 的特点和适用场景
以下是 Session 与 JWT 的特点和适用场景的总结:
一、Session
特点:
- 存储在服务器端:Session 是在服务器端存储的,每个用户在服务器上有一个唯一的 Session 对象。
- 依赖于服务器状态:Session 的存在依赖于服务器的状态,服务器需要维护每个用户的 Session 信息。
- 可扩展性有限:随着用户数量的增加,服务器需要管理大量的 Session 信息,可能会对性能和扩展性造成一定的限制。
适用场景:
- 传统的 Web 应用程序:Session 适用于传统的 Web 应用程序,其中服务器负责管理用户的会话。
- 需要服务器端存储数据:如果应用程序需要在服务器端存储用户的相关数据(如购物车信息、用户偏好等),Session 是一个合适的选择。
- 对安全性要求不高:如果对数据的安全性要求不高,并且可以接受一定的安全风险,Session 可以满足需求。
二、JWT
特点:
- 自包含:JWT 是一个包含用户身份信息和权限信息的自包含字符串。
- 无状态:JWT 本身是无状态的,服务器不需要存储与用户会话相关的状态信息。
- 可扩展性好:JWT 可以在不同的系统和服务之间进行传递和验证,具有较好的可扩展性。
适用场景:
- API 访问控制:JWT 适用于 API 访问控制,客户端在进行 API 请求时发送 JWT,服务器通过验证 JWT 的签名和其中的声明来确定客户端是否有权访问该 API 资源。
- 单点登录(SSO)系统:JWT 可以用于实现单点登录,用户在一个身份提供者(Identity Provider,IDP)上进行身份验证,然后获取一个包含身份信息的 JWT。之后,用户可以将这个 JWT 发送给多个服务提供者(Service Provider,SP),而无需再次进行身份验证。
- 移动应用和跨平台应用:JWT 适用于移动应用和跨平台应用,因为它可以在客户端存储和传递,而不依赖于服务器端的状态。
总的来说,选择 Session 还是 JWT 取决于应用的需求和特点。如果需要服务器端存储数据并且对安全性要求不高,可以选择 Session。如果需要在不同系统之间传递身份和权限信息,或者对可扩展性和性能有更高的要求,可以选择 JWT。
相关文章:

Session 与 JWT 的对决:谁是身份验证的王者? (下)
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

论文笔记:Confidential Assets
Confidential Assets 描述了一种称为“保密交易”的方案,该方案模糊了所有UTXO的金额,同时保持了不创建或销毁硬币的公共可验证性。进一步将此方案扩展到“保密资产”,一种单一的基于区块链的分类帐可以跟踪多种资产类型的方案。将保密交易扩…...

Docker下搭建MySQL主从复制
目录 主从复制简介 主从复制搭建 主从复制简介 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库;主数 据库一般是准实时的业务数据库。 主从复制的作用 做数据的热备。作为后备数据库,主数据库服务器故…...

VBA数据库解决方案第七讲:如何利用Recordset对象打开数据库的数据记录集
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…...

内部培训平台的系统 PlayEdu搭建私有化内部培训平台
PlayEdu是由白书科技团队多年经营的线上教育系统,专为企业提供的全新企业培训方案 我们的目标是为更多的企业机构搭建私有化内部培训平台,以满足不断增长的培训需求 通过PlayEdu,企业可以有效地组织和管理培训资源,提供高质量的…...

Elasticsearch 相似度评分模型介绍
前言 Elasticsearch 是基于 Lucene 的世界范围内最流行的全文检索框架,其文档相似度算法包含 TF/IDF 和 BM25,从 ES 5.0开始 BM25 算法已经成为 ES 默认的相似度评分模块。 TF-IDF 与 BM25 的区别 TF-IDF 和 BM25 都是计算文本相似性的常用算法。TF-ID…...

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0
前言 考虑到文生视频开始爆发,比如11月份就是文生视频最火爆的一个月 11月3日,Runway的Gen-2发布里程碑式更新,支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商,Stability AI则开发的SD后续版本)11月16日&a…...

SQL Server 2016(基本概念和命令)
1、文件类型。 【1】主数据文件:数据库的启动信息。扩展名为".mdf"。 【2】次要(辅助)数据文件:主数据之外的数据都是次要数据文件。扩展名为".ndf"。 【3】事务日志文件:包含恢复数据库的所有事务…...

Linux C语言 30-套接字操作
Linux C语言 30-套接字操作 本节关键字:C语言 网络通信、套接字操作、TCP、UDP、服务端、客户端 相关C库函数:socket, bind, listen, accept, setsockopt, recv, send, recvfrom, sendto, close 什么是网络通信? 通信是人与人之间通过某种…...

RPC和REST对比
RPC和REST对比 参考学习 RPC 和 REST 之间有什么区别? 当我们对比RPC和REST时,其实是在对比RPC风格的API和REST风格的API,后者通常成为RESTful API。 远程过程调用(RPC)和 REST 是 API 设计中的两种架构风格。API …...

外包干了2年,技术退步明显。。。
前言 简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快两年了我薪资、技术各个方面都有了很大的提升,他在外包干的这两年人都要废了,技术没一点提升,学不到任何东西&…...

深度学习——第1章 深度学习的概念及神经网络的工作原理
1.1 序言——探索智能机器 千百年来,人类试图了解智能的机制,并将它复制到思维机器上。 人类从不满足于让机械或电子设备帮助做一些简单的任务,例如使用滑轮吊起沉重的岩石,使用计算器做算术。 人类希望计算机能够自动化执行更…...

爬虫爬取百度图片、搜狗图片
通过以下代码可以爬取两大图片网站(百度和搜狗)的图片,对于人工智能、深度学习中图片数据的搜集很有帮助! 一、爬取百度图片 该代码可以爬取任意百度图片中自定义的图片: import requests import re import time imp…...

Android Camera2使用
一 简介 1.1 Camera API: 这是旧版本的相机API,也称为Camera1 API。它提供了较简单的使用方式,适用于旧版Android设备。但它存在一些限制,如性能不佳、操作复杂等 1.2 Camera2 API: 这是新版本的相机API࿰…...

IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)
安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可,了解首页各个按钮的作用 charles全面使用教程及常见功能详解(较详细)…...

七、Lua字符串
文章目录 一、字符串(一)单引号间的一串字符(二)local str "Hello, "(三)[[ 与 ]] 间的一串字符(四)例子 二、字符串长度计算(一)string.len&…...

0基础学java-day13
一、包装类 1. 包装类的分类 1) 针对八种基本数据类型相应的引用类型【对象】—包装类 2) 有了类的特点,就可以调用类中的方法。 3) 如图: 2 包装类和基本数据的转换 3 案例演示 Integer01.java package com.hspedu.wrapper;/*** author 林然* version 1.0*/ p…...

好题记录:
好题记录: 1:2:3:三级目录 1: 下面代码的结果是:( ) 下面代码的结果是:( )#include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i …...

web前端之JavaScrip中的闭包
MENU 闭包--笔试-11defineReactive函数,利用闭包封装Object.defineProperty()闭包--节流函数--笔试-10闭包的定义JavaScript闭包的9大经典使用场景 闭包–笔试-11 function fun() { var n 9; // js 中强行给一个未声明的变量赋值,// 程序不会报错// 并…...

Windows下命令行启动与关闭WebLogic的相关服务
WebLogic 的服务器类型 WebLogic提供了三种类型的服务器: 管理服务器节点服务器托管服务器 示例和关系如下图: 对应三类服务器, 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…...

LeetCode Hot100 169.多数元素
题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 方法一:哈希表 class Solution {public int…...

数据结构:堆的实现思路
我们之前写过堆的实现代码:数据结构:堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…...

结合 DBSCAN 示例代码介绍 DBSCAN
前文为JoyT的科研之旅第一周——科研工具学习及论文阅读收获-CSDN博客 DBSCAN 介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够识别出任意形状的簇,并有效地处理噪声…...

vscode 调试jlink
文章目录 软件使用说明1、启动GDB Server2、下载gdb3、vscode配置4、调试 软件 vscodejlink - (JLinkGDBServer.exe)gcc-arm-none-eabi-10-2020-q4-major (arm-none-eabi-gdb.exe) 使用说明 vscode通过TCP端口调用JLinkGDBServer通过jlink连接和操作设备,vscode不…...

微前端实战:打造高效、灵活的前端应用架构
文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展,前端应用的规模和复杂度也在不断增加。…...

csv文件EXCEL默认打开乱码问题
这里讨论的问题是,当用记事本打开带有中文字符的csv正常时,用excel打开却是乱码。 简单概括就是:编码问题,windows的 excel打开csv文本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。如果写文件…...

C语言之实现贪吃蛇小游戏篇(2)
目录 🎇测试游戏test.c 🎇游戏头文件包含&函数声明snake.h 🎇游戏实现snake.c 🎇测试游戏test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "snake.h" void test() {int ch 0;do{Snake snake { 0 };//创建…...

Comparator接口
Comparator接口 Comparator 是 Java 中用于比较对象的接口。它允许开发者实现自定义的比较逻辑,以用于对对象进行排序或者确定它们的顺序。 主要方法: Comparator 接口中包含一个抽象方法: int compare(T o1, T o2):用于比较两…...

SELinux refpolicy详解(9)
接前一篇文章:SELinux refpolicy详解(8) 三、refpolicy内容详解 上一回讲解了refpolicy源码根目录下的build.conf文件的前一部分内容。本回继续讲解其后一部分。 2. build.conf 文件路径:refpolicy源码根目录/build.conf。 文…...

零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型
目标检测作为当前计算机视觉落地的热点技术之一,已被广泛应用于自动驾驶、智慧园区、工业检测和卫星遥感等场景。开发者在研究相关目标检测技术时,通常需熟练掌握图像目标检测框架,如通用目标检测框架 YOLO 系列,旋转目标检测框架…...