Session + JWT + Cookie

00:HTTP无状态(为了保持状态,前端好麻烦,又要自己存,又要想办法带出去,于是使用cookie

01:Cookie  将用户信息,在每次请求时候 带给后端(但是自己存储大小有限,同时不太安全,但是是基石)

02:Session 用户登录,后生成一个SessionId(该Id用来映射在服务端用户的信息使用),然后返回给前端,前端请求的时候在将SessionId带给后端,后端根据它再去验证(需要每次查询数据库)(通过cookie将sessionId带过去

03:JWT 通过cookie将sessionId带过去

JWT 生成和验证的过程

1. 用户登录并生成JWT

    用户登录 :          用户通过前端提交登录请求(通常包含用户名和密码)到服务器. 

    验证用户信息:    服务器验证用户名和密码是否正确.

    生成JWT:

        服务器生成JWT的三个部分: Header、Payload、Signature.

        Header: 指定JWT的类型和签名算法.例如:

            {

                "alg": "HS256",

                "typ": "JWT"

            }

        Payload: 包含用户信息和其他声明.例如:

            {

                "userId": "123456",

                "username": "user1",

                "role": "admin",

                "iat": 1623847200,  // 签发时间

                "exp": 1623850800   // 过期时间

            }

        Signature: 使用Header和Payload, 加上服务器的密钥, 按照指定的签名算法生成签名.例如, 使用HMAC SHA-256算法生成签名

    返回JWT给前端:      服务器将JWT(Header + Payload + Signature)返回给前端.
 

2. 前端携带JWT进行请求

   前端存储JWT:       前端将接收到的JWT存储在localStorage、sessionStorage或Cookie中.

   请求时携带JWT:    前端在后续请求的HTTP头部中携带JWT:

3. 服务器验证JWT

    提取并解析JWT:     服务器从请求头中提取JWT, 并将其分成Header、Payload和Signature三部分.

  重新生成签名:           服务器使用Header和Payload, 再次生成签名:

    验证签名:                 服务器比较重新生成的签名和JWT中的原始签名: 

  检查有效期:                服务器检查Payload中的过期时间(exp)是否过期:     

  完成验证:                   如果签名验证通过且JWT未过期, 说明JWT是有效的, 服务器可以信任JWT中的用户信息.

   

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

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

相关文章

期权与股票在交易上是有什么区别吗?

国内的股票市场,只能做多,T1交易。期权则分为4个方向,买入看涨期权,买入看跌期权,也就是做多和做空T0双向交易,同时每个方向还区分不同的行权价,每个行权价对应的4个方向的期权,都有…

AI大模型日报#0529:杨红霞创业入局“端侧模型”、Ilya左膀右臂被Claude团队挖走

导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE 4.0)、“零一万物”(Yi-34B)生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff0…

springboot+minio 文件上传

前期准备 需要先安装minio文件服务器&#xff0c;请参考我上一篇文章 pom.xml 版本 本次使用的是springboot2.7.16 版本&#xff0c; minio 版本是8.2.2 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-pare…

shell脚本:将一维数组以二维数组显示

shell脚本:将一维数组改成二维数组显示 1.编辑脚本文件 vi output_array.sh2.编写脚本 #!/bin/bash# 假设一维数组one_array已经包含9个元素 one_array=(1 2 3 4 5 6 7 8 9) # 获取数组长度 length=

信息学奥赛初赛天天练-15-阅读程序-深入解析二进制原码、反码、补码,位运算技巧,以及lowbit的神奇应用

更多资源请关注纽扣编程微信公众号 1 2021 CSP-J 阅读程序1 阅读程序&#xff08;程序输入不超过数组或字符串定义的范围&#xff1b;判断题正确填 √&#xff0c;错误填&#xff1b;除特 殊说明外&#xff0c;判断题 1.5 分&#xff0c;选择题 3 分&#xff09; 源码 #in…

spring session+redis存储session,实现用户登录功能,并在拦截器里面判断用户session是否过期,过期就跳转到登录页面

在Spring应用中&#xff0c;使用Redis存储Session是一种常见的方式&#xff0c;可以实现分布式环境下的Session管理。以下是实现用户登录功能&#xff0c;并在拦截器中判断Session是否过期并跳转到登录页面的基本步骤&#xff1a; 添加依赖&#xff1a;首先&#xff0c;确保你的…

debian11安装留档@VirtualBox

因为debian12无法安装tpot&#xff0c;所以又把11重新安装一遍&#xff0c;以前的安装文档&#xff1a;安装Debian 11 留档-CSDN博客 下载光盘 华为云地址&#xff1a;https://repo.huaweicloud.com/debian-cd/11.0.0/amd64/iso-cd/ 使用了debian11 教育版&#xff0c;比较有…

【第7章】SpringBoot整合Mybatis-Plus

文章目录 前言一、引入库二、案例1.UserMapper2.UserController3. 结果 三、配置总结 前言 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 上一篇内容已经整合过Mybatis&#xff0c;这里在…

车载电子电器架构 —— 智能座舱标准化意义

车载电子电器架构 —— 智能座舱标准化意义 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

11.RedHat认证-Linux文件系统(中)

11.RedHat认证-Linux文件系统(中) Linux的文件系统 格式化分区(1道题) #对于Linux分区来说&#xff0c;只有格式化之后才能使用&#xff0c;不格式化是无法使用的。 #Linux分区格式化之后就会变成文件系统&#xff0c;格式化的过程相当于对分区做了一个文件系统。 #Linux常见…

筛斗数据提取:简化信息收集,加速洞察生成

在当今快速发展的商业环境中&#xff0c;数据已成为企业获取竞争优势的关键资源。随着大数据技术的不断进步&#xff0c;自动化数据提取显得尤为重要&#xff0c;它不仅简化了信息收集的过程&#xff0c;还显著加速了从数据到洞察的转化速度。本文将探讨自动化数据提取的重要性…

awtk踩坑记录二:移植jerryscript到awtk design项目

工作要求&#xff0c;想尝试看看在awtk-designer设计界面的同时能不能用javascript开发逻辑层&#xff0c;以此和前端技术联动&#xff0c;本文是一种项目建构的思路。 从github下载并编译awtk, awtk-mmvm和awtk-jerryscript&#xff08;如果没有&#xff09; 用awtk-designer…

Linux搭建PHP下的RabbitMQ环境(php-amqp/rabbitmq-c/erlang)

本文演示环境 Red Hat 11.2.1-9gcc (GCC) 11.2.1 20220127OpenSSL v1.1.0PHP 7.1 安装erlang erlang和RabbitMQ有版本对应关系Erlang Version Requirements&#xff0c;需要选择正确的版本。 本文以erlang 26和RabbitMQ 3.13.2为例。 erlang下载地址 下载包上传服务器后&a…

从System Prompt来看Claude3、Kimi和ChatGLM4之间的差距

大家好,我是herosunly。985院校硕士毕业,现担任算法t研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算…

虚函数的性能消耗到底在哪?

虚函数的性能消耗 聊到虚函数的性能开销&#xff0c;大家的第一反应肯定是间接调用上&#xff0c;何为间接调用&#xff1f; 当调用一个虚函数时&#xff0c;实际执行的函数版本是在运行时通过虚函数表&#xff08;virtualtable&#xff09;查找确定的。这个查找过程是一个间接…

【介绍下运维开发】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

6.10 Libbpf-bootstrap(一,简介)

写在前面 在看完前面的介绍,是不是感觉看了也就看了。但是,如果想要像BCC那样使用libbpf编写BPF程序,该怎么开始呢? 那么这就需要libbpf-bootstrap了。 libbpf-bootstrap是官方推荐的一个范式,就像我们写PPT的模版。简单来说可以简化我们的BPF开发流程,它可以帮助我们…

每日复盘-20240529

20240529 六日涨幅最大: ------1--------300956--------- 英力股份 五日涨幅最大: ------1--------301361--------- 众智科技 四日涨幅最大: ------1--------301361--------- 众智科技 三日涨幅最大: ------1--------300637--------- 扬帆新材 二日涨幅最大: ------1--------30…

el-pagination在删除非第一页的最后一条数据遇到的问题

文章目录 前言一、问题展示二、解决方案三、源码解析1、elementui2、elementplus 总结 前言 这个问题是element-ui中的问题&#xff0c;可以从源码中看出来&#xff0c;虽然页码更新了&#xff0c;active也是对的&#xff0c;但是未调用current-change的方法&#xff0c;这里就…

爬虫案例(读书网)

一.我们还是使用简单的bs4库和lxml&#xff0c;使用xpath&#xff1a; 导入下面的库&#xff1a; import requests from bs4 import BeautifulSoup from lxml import etree 我们可以看见它的div和每个书的div框架&#xff0c;这样会观察会快速提高我们的简单爬取能力。 二.实…