登录认证-登录校验-会话技术方案选择和对比(cookie、session和JWT令牌)

news2024/11/20 13:25:34

会话技术方案选择和对比

  • 一、背景说明
  • 二、会话技术之 Cookie
    • 1、为什么说cookie是客户端会话技术
    • 2、cookie的优点和缺点
  • 三、会话技术之 Session
    • 1、为什么说Session是服务端会话技术
    • 2、session的优点和缺点
  • 四、令牌技术JWT
    • 1、JWT 的原理
    • 2、JWT的优点和缺点

一、背景说明

在开发登录功能时,难以避免的会面临选择何种会话技术,来对用户的登录状态进行认证和校验。常见的三种方式包括:

  • cookie
  • session
  • JWT令牌

下面依次展开对这三种会话技术的优缺点进行说明。

二、会话技术之 Cookie

1、为什么说cookie是客户端会话技术

cookie是一种客户端会话技术,他是存储在浏览器的,那为什么说他是客户端会话技术呢?可以看以下代码来证明:

private static void set(HttpServletResponse response, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
		Cookie cookie = new Cookie(key, value);
		if (domain != null) {
			cookie.setDomain(domain);
		}
		cookie.setPath(path);
		cookie.setMaxAge(maxAge);
		cookie.setHttpOnly(isHttpOnly);
		response.addCookie(cookie);//直接响应给浏览器,没有存储在服务器端
	}

他是由服务器端,通过response对象直接响应给浏览器的,并没有存在服务器中。
下图就是服务器响应给客户端浏览器的cookie
在这里插入图片描述

2、cookie的优点和缺点

优点

  • 他是HTTP协议中支持的技术
  • 占用更少的内存,不需要任何服务器资源,并存储在用户的计算机上,因此不会给服务器带来额外的负担。

缺点

  • 移动端APP无法使用cookie
  • 不安全,用户可以自己禁用浏览器的cookie
  • cookie不能跨域

补充说明一下,跨域区分的三个维度:协议、域名/IP、端口

三、会话技术之 Session

1、为什么说Session是服务端会话技术

Session是一种服务端会话技术,他是存储在服务器上的,那为什么说他是服务器会话技术呢?可以看以下代码来证明:

public static String getValue(HttpServletRequest request, String key) {
		HttpSession session = request.getSession();
		session.setAttribute("login",key+"_"+ UUID.randomUUID());
		.......
	}

当客户端第一次请求服务器的时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象

下图是浏览器请求服务器端接口时,浏览器会把之前服务器端生成的sessionID,通过请求头带给服务器
在这里插入图片描述

2、session的优点和缺点

优点

  • 存储在服务器端,比较安全

缺点

  • 服务器集群环境下无法直接使用session

四、令牌技术JWT

1、JWT 的原理

服务器认证以后,生成一个 JSON 对象,发回给用户,就像下面这样。

{
“姓名”: “张三”,
“角色”: “管理员”,
“到期时间”: “2018年7月1日0点0分”
}
以后,用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。

服务器就不保存任何 session 数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。

2、JWT的优点和缺点

优点

  • 支持pc端、移动端
  • 解决集群环境下的认证问题
  • 减去服务器端的存储压力

缺点

  • JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

  • JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。

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

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

相关文章

5小时玩转阿里云实时计算Flink实时湖仓之代码文档

文章目录 视频链接 bxg代码文档项目离线数据准备MySQL映射表流数据准备num.txtmakedata.log(空文件)start.shcreate-log.shinsert-data.sh 维表创建paimon_dim表mysql_to_paimon_dim任务 事实表ODS层ECS创建ods层kafka topickafka_ods表mysql_to_kafka_ods数据插入paimon_ods表…

什么牌子的运动耳机好、好的运动耳机排行榜

运动与健康息息相关,人们越来越认识到运动带来的益处,例如增强心肺功能、提高新陈代谢率,并能预防多种慢性疾病。随着社交媒体上越来越多人分享自己的运动心得,更多的人也被激发起参与其中的热情。在运动过程中,音乐的…

vue实现表格的动态高度

需求:表格能够根据窗口的大小自动适配页面高度 防抖和节流函数的使用场景是当需要对频繁触发的事件进行限制时,例如: 防抖函数常用于限制用户在短时间内多次触发某一事件,例如搜索框输入并搜索,当用户一直在输入时,我们可以使用防抖函数来避免多次请求搜索结果,减轻服…

【el-tree】树形组件图标的自定义

饿了么树形组件的图标自定义 默认样式: 可以看到el-tree组件左侧自带展开与收起图标,咱们可以把它隐藏:: .groupList {::v-deep .el-tree-node { .el-icon-caret-right {display: none;} } } 我的全部代码 <div class"groupList"><el…

AI 时代,程序员无需焦虑

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

开发电子木鱼功德+1需要多少钱

冥想木鱼小程序是一种结合了冥想和科技的应用形式&#xff0c;为用户提供了随时随地进行冥想的便捷方式。开发一款高质量的冥想木鱼小程序需要综合考虑技术实现、冥想专业性和用户体验等多个方面。本文将详细介绍冥想木鱼小程序的开发过程&#xff0c;并探讨其中的专业性与思考…

数据的画布,洞察的窗口:畅想可视化大屏的未来

可视化大屏&#xff0c;作为信息传达的魔法之笔&#xff0c;正以其独特的魅力在各个领域迅速崭露头角。它将抽象的数据和信息转化为丰富多彩的图形、图表和动画&#xff0c;以更直观、生动的方式呈现在人们的眼前。 无论身处何地&#xff0c;可视化大屏都能显现其强大的应用价…

GPT和AI绘图学习【第13期】,chatgpt文案制作引导并写出爆款小红书推文、AI换脸、客服话术回复等

第13期GPT和AI绘图学习班&#xff0c;主要内容包括&#xff1a;ChatGPT文案制作引导并写出爆款小红书推文、分析数据、策划视频脚本、图片扩展、高效修图、产品设计、平面设计、线镐渲染、AI换脸、客服话术回复等。 目录&#xff1a; 1.第1天&#xff1a;运用GPT提高工作效率…

【随笔】如何使用阿里云的OSS保存基础的服务器环境

使用阿里云OSS创建一个存储仓库&#xff1a;bucket 在Linux上下载并安装阿里云的ossutil工具 // 命令行&#xff0c;是linux环境 3. 安装ossutil。sudo -v ; curl https://gosspublic.alicdn.com/ossutil/install.sh | sudo bash 说明:安装过程中&#xff0c;需要使用解压工具…

MyBatis的核心技术掌握,简单易懂(上)

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛&#xff1f;&#xff1f; 三.MyBatis 中的结果映射 1. resultType&#xff1a; 2. resultMap&#xff1a; ---问题 ---…

【学习FreeRTOS】第18章——FreeRTOS软件定时器

1.软件定时器的简介 定时器&#xff1a;从指定的时刻开始&#xff0c;经过一个指定时间&#xff0c;然后触发一个超时事件&#xff0c;用户可自定义定时器的周期硬件定时器&#xff1a;芯片本身自带的定时器模块&#xff0c;硬件定时器的精度一般很高&#xff0c;每次在定时时…

文字的力量:如何细节决定工作与个人成长的走向

在工作和个人发展的道路上&#xff0c;写作与沟通是两个不可或缺的技能。而这其中&#xff0c;错别字、敏感词、政治口号、标点错误以及常识性错误这些细节&#xff0c;常常被忽视&#xff0c;但其对个人和工作的影响却是深远的。这些细节不仅直接反映出一个人的专业程度&#…

解决,worldGeo.db中有geom数据的x1表无法在QGIS中成图像

原因:缺少geom数据对应的坐标geometry_columns文件,如下图所示&#xff1a; STEP: 1,在navicat_for_SQLite中将目标表x1中字段geom中blob改成,POINT,或者MULTIPOLYGON等对应的格式 注意&#xff01;&#xff1a;f_table_name 表名 和 f_geometry_column geom空间数据所在字段…

【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计

【FPGA】verilog语法的学习与应用 —— 位操作 | 参数化设计 学习新语法&#xff0c;争做新青年 计数器实验升级&#xff0c;让8个LED灯每个0.5s的速率循环闪烁&#xff0c;流水灯ahh好久不见~ 去年光这个就把我折磨够呛。。我肉眼可见的脱发就是从那时候开始的。。在那两个月…

Linux学习记录——이십유 多线程(3)

文章目录 1、生产者消费者模型1、基于BlockingQueue的生产者消费者模型2、对模型全面的认识3、多生产者多消费者 2、信号量1、POSIX信号量2、基于环形队列的生产消费模型3、多生产者多消费者 3、多生产者多消费者模型的意义 1、生产者消费者模型 顾名思义&#xff0c;就像是供…

sed编辑器在windows平台上的使用

一、写在前面 我们经常在linux上使用sed命令去替换文件里面固定字符串&#xff0c;但是有时候我们使用的windows系统&#xff0c;文件太大又不方便传到linux上去操作&#xff0c;反复上去和下载浪费空间&#xff0c;又浪费传输的带宽。所以在windows上我们也必须要有sed工具&a…

Node.js 的 Buffer 是什么?一站式了解指南

在 Node.js 中&#xff0c;Buffer 是一种用于处理二进制数据的机制。它允许你在不经过 JavaScript 垃圾回收机制的情况下直接操作原始内存&#xff0c;从而更高效地处理数据&#xff0c;特别是在处理网络流、文件系统操作和其他与 I/O 相关的任务时。Buffer 是一个全局对象&…

为DOSBOX创建互联网能力

DOSBOX能运行DOS游戏及MASM&#xff0c; C等开发语言&#xff0c;要让它联接互联网还是要一些特殊配置的。 1. 安装npcap软件 下载最新版免费软件npcap.exe&#xff0c;正常安装。它会自己绑定到每一张网卡&#xff0c;建立网卡数据与DOSBOX的交互通道。 2. 查看系统中的网卡…

基于流计算 Oceanus(Flink) CDC 做好数据集成场景

由于第一次做实时&#xff0c;所以踩坑比较多&#xff0c;见谅(测试环境用的flink),小公司没有用到hadoop组件 一、踩坑记录 1:本地代码的flink版本是flink1.15.4&#xff0c;生产环境是flink1.16.1&#xff0c;在使用侧输出流时报错&#xff0c;需要使用以下写法,需要使用Si…

SpingMVC拦截器-异常处理的思路,用户体验不好的地方

1、异常处理机制 1.1 原先我们的异常都是手动的try..catch() 2、他存在着一些缺陷&#xff1a;这里创建了一个Demo的controller,内部有一个show方法&#xff1a; 3、访问内部&#xff0c;我要实现demoshow方法&#xff0c;我们来调用show1和show2的方法&#xff1a; 4、有一…