Session Cookie Jwt Token常见web授权

基于分布式系统、同公司内、同一个 redis 作为存储,这个是目前主要的用法,去找开源框架都是这个逻辑;对外开放等使用参考 OAuth 2.0

能够标识出用户是谁,安全性相对高一些,就是好的方案。

Cookie

Set 和 Get:

  • 服务端控制 Set: 服务器可以通过 HTTP 响应头中的 Set-Cookie 字段来设置 Cookie。如果浏览器没有找到相应的 Cookie,服务器通常会设置一个默认的 Cookie。——通过服务端渲染,返回给前端的代码也可以拼接上前端主动setCookie也行
  • 浏览器处理: 浏览器接收到 Set-Cookie 后会自动存储和管理这些 Cookie。当浏览器再次向同一服务器发送请求时,它会自动将所有相关 Cookie 附加到请求头中。

Session

会话 ID:

  • 服务器为每个用户创建一个唯一的会话 ID,并将其存储在服务器端(如redis、Db等)。
  • 会话 ID 通常会被包装在一个名为 sessionid 的 Cookie 中,这样浏览器在每次请求时都会自动携带这个 ID。
  • 服务器通过会话 ID 来识别用户,并获取与该用户相关的会话数据。

JWT(JSON Web Token)

用户信息加密字符串:

  • JWT 是一种用于在网络应用间传递声明的开放标准(RFC 7519)。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。
  • JWT 的载荷部分可以包含用户的身份信息和其他相关数据。这些数据在服务器端进行加密处理后生成 JWT 字符串。
  • 由于 JWT 是自包含的,因此可以减少对数据库的查询。但是,JWT 不易于实现下线处理,因为一旦签发,它将在其过期时间之前一直有效。为了解决这个问题,通常会在服务器端(如 Redis)存储一份 JWT 的副本,并设置相应的过期时间。当需要强制用户下线时,只需删除 Redis 中的对应记录即可。

Token(跟 SessionId 差不多)

服务端生成和 Redis 存储:

  • Token 是一种用于身份验证的字符串,通常由服务器生成并返回给客户端。
  • 与 JWT 不同,Token 可以是任何格式和长度的字符串,只要它能够唯一标识用户即可。
  • 为了提高安全性和可扩展性,可以将 Token 存储在 Redis 等内存数据库中。这样,当用户登录或刷新 Token 时,服务器只需更新 Redis 中的记录即可。
  • 在请求处理过程中,服务器可以通过检查 Redis 中是否存在对应的 Token 来验证用户的身份。同时,Redis 的高性能和分布式特性也使得 Token 验证过程更加高效和可靠。

总结

  1. Session 和 Cookie 在分布式环境下的处理
    • 传统的单体应用中,session 数据通常存储在服务器端。但在分布式系统中,为了支持水平扩展和数据共享,可以将 session 数据存储在像 Redis 这样的集中式存储中。
  2. JWT 与 Redis 的结合使用
    • JWT(JSON Web Tokens)本身包含所有认证信息,不需要服务器查询数据库验证,但其过期管理和注销机制较弱。为了解决这些问题,通常在 Redis 中货数据存储 JWT 的黑名单来管理过期时间和下线操作。——这就很没意思(快和token一个月i死了)
  3. Token 的管理和免登录功能
    • Token后端一般存储在 Redis 中进行统一管理。对于需要实现长时间免登录的功能,可以通过设置一个长期有效的 cookie(例如30天有效期),token 脱离了 cookie 的安全校验,跨域更加方便

jwt web 场景下意义就不是很大了,选择用 token 有些情况下也是会和 cookie 一起搭配使用了;

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

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

相关文章

Python3:多行文本内容转换为标准的cURL请求参数值

背景 在最近的工作中,经常需要处理一些接口请求的参数,参数来源形式很多,可能是Excel、知识库文档等,有些数据形式比较复杂,比如多行或者包含很多不同的字符,示例如下: **客服质检分析指引** …

【精选】分享9款AI毕业论文生成初稿题目网站

在当今学术研究领域,AI技术的应用日益广泛,尤其是在学术论文的撰写过程中。AI论文生成器的出现,极大地简化了学术写作流程,提高了写作效率。以下是9款推荐的AI毕业论文生成初稿的网站,它们各有特色,能够满足…

MFC工控项目实例之七点击下拉菜单弹出对话框

承接专栏《MFC工控项目实例之六CFile添加菜单栏》 1、在SEAL_PRESSUREDlg.h文件中添加代码 class CSEAL_PRESSUREDlg : public CDialog { ...afx_msg void OnTypeManage(); ... } 2、在SEAL_PRESSUREDlg.cpp文件中添加代码 BEGIN_MESSAGE_MAP(CSEAL_PRESSUREDlg, CDialog)//…

MySQL的源码安装及基本部署(基于RHEL7.9)

这里源码安装mysql的5.7.44版本 一、源码安装 1.下载并解压mysql , 进入目录: wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz tar xf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44/ 2.准备好mysql编译安装依赖: yum install cmake g…

数据结构:用栈实现队列(232)LeetCode

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回队列开…

Python爬虫——简单网页抓取(实战案例)小白篇

Python 爬虫是一种强大的工具,用于从网页中提取数据。这里,我将通过一个简单的实战案例来展示如何使用 Python 和一些流行的库(如 requests 和 BeautifulSoup)来抓取网页数据。 实战案例:抓取一个新闻网站的头条新闻标…

Windows上传Linux文件行尾符转换

Windows上传Linux文件行尾符转换 1、Windows与Linux文件行尾符2、Windows与Linux文件格式转换 1、Windows与Linux文件行尾符 众所周知,Windows、Mac与Linux三种系统的文件行尾符不同,其中 Windows文件行尾符(\r\n): L…

使用kafka改造分布式事务

文章目录 1、kafka确保消息不丢失?1.1、生产者端确保消息不丢失1.2、kafka服务端确保消息不丢失1.3、消费者确保正确无误的消费 2、生产者发送消息 KafkaService3、UserInfoServiceImpl -> login()4、service-account - > AccountListener.java 1、kafka确保消…

day31-测试之性能测试工具JMeter的功能概要、元件作用域和执行顺序

目录 一、JMeter的功能概要 1.1.文件目录介绍 1).bin目录 2).docs目录 3).printable_docs目录 4).lib目录 1.2.基本配置 1).汉化 2).主题修改 1.3.基本使用流程 二、JMeter元件作用域和执行顺序 2.1.名称解释 2.2.基本元件 2.3.元件作用域 1).核心 2).提示 3).作用域的原则 2.…

常用PHP JS MySQL 常用方法记录

常用PHP JS MySQL 常用方法记录 MySQL 1)查询 Select 1.1)FROM_UNIXTIME 根据创建时间 时间戳 筛选 WHEREFROM_UNIXTIME(kl.created_at) BETWEEN 2024-08-01 00:00:01 AND 2024-08-08 23:59:59 1.2)DATE_FORMAT 格式化时间戳 DATE_FOR…

Redis 实现哨兵模式

目录 1 哨兵模式介绍 1.1 什么是哨兵模式 1.2 sentinel中的三个定时任务 2 配置哨兵 2.1 实验环境 2.2 实现哨兵的三条参数: 2.3 修改配置文件 2.3.1 MASTER 2.3.2 SLAVE 2.4 将 sentinel 进行备份 2.5 开启哨兵模式 2.6 故障模拟 3 在整个架构中可能会出现的问题 …

go中 panicrecoverdefer机制

go的defer机制-CSDN博客 常见panic场景 数组或切片越界,例如 s : make([]int, 3); fmt.Println(s[5]) 会引发 panic: runtime error: index out of range空指针调用,例如 var p *Person; fmt.Println(p.Name) 会引发 panic: runtime error: invalid m…

Android Init Language

Android Init Language 安卓初始化语言,是一种用于配置和管理 Android 系统服务的专用脚本语言。主要用于编写 .rc 文件(比如我们熟知的init.rc文件),这些文件在系统启动时由 init 进程读取和执行,从而设置和启动系统服…

Mako 模板语言

Mako 模板语言 Mako的哲学:Python is great scripting language ,don’t reinvent the wheel, your template can handle it !, api非常简单, ####入门 Template类是创建模板和渲染模板的核心类 from mako.template import Template mytemplate Template("hello world&…

网络通信tcp

一、udp案例 二、基于tcp: tcp //c/s tcp 客户端: 1.建立连接 socket bind connect 2.通信过程 read write close tcp服务器: 1.建立连接 socket bind listen accept 2.通信过程 read write close connect函数 int connect(int sockfd, con…

Git克隆仓库太大导致拉不下来的解决方法 fatal: fetch-pack: invalid index-pack output

一般这种问题是因为某个文件/某个文件夹/某些文件夹过大导致整个项目超过1G了导致的 试过其他教程里的设置depth为1,也改过git的postBuffer,都不管用 最后还是靠克隆指定文件夹这种方式成功把项目拉下来 1. Git Bash 输入命令 git clone --filterblob:none --sparse 项目路径…

探索Unity3D URP后处理在UI控件Image上的应用

探索Unity3D URP后处理在UI控件Image上的应用 前言初识URP配置后处理效果将后处理应用于UI控件方法一:自定义Shader方法二:RenderTexture的使用 实践操作步骤一:创建RenderTexture步骤二:UI渲染至RenderTexture步骤三:…

视频如何转gif?分享这几款软件!

在这个快节奏、高创意的互联网时代,动图(GIF)以其独特的魅力成为了社交媒体、聊天软件中的宠儿。它们不仅能瞬间抓住眼球,还能让信息传递更加生动有趣。然而,你是否曾为如何将精彩瞬间从视频中精准截取并转换成GIF而苦…

富士变频器主板EP-3611E-C EP-3611E-C-Z2

富士变频器主板EP-3611E-C EP-3611E-C-Z2 ‌富士变频器主板EP-3611E-C EP-3611E-C-Z2‌是富士电机株式会社研发、生产、销售的世界知名变频器品牌之一的一部分。富士变频器,全称为“富士交流变频调速器”,主要用于三相异步交流电机,通过改变…

​北斗终端:无人驾驶领域的导航新星

一、北斗终端在无人驾驶领域的应用 北斗终端,作为我国自主研发的北斗卫星导航系统的重要组成部分,其在无人驾驶领域中的应用正逐步显现其独特魅力。北斗系统的高精度、高可靠性和良好的抗干扰性能,为无人驾驶车辆提供了精确的定位和导航服务…