Cookie Session Token的各种知识

news2024/9/30 19:29:48

Session

1、为什么有session?
因为HTTP是无状态协议,每次请求服务器并不知道历史请求的记录,Session和Cookie主要就是为了弥补无状态的特性

2、Session是什么
客户端请求时,服务端开辟一块内存空间存放Session对象,存储结构为ConcurrentHasMap

3、如何判断是同一会话
服务器第一次收到请求时创建了Session对象,生成了一个seesionId,通过响应头的Set-Cookie:JESSIONID=XXXX命令,告知客户端要求设置Cookie

客户端收到后,在本机设置JSESSIONID=XXX的Cookie,该Cookie的过期时间为浏览器会话结束

在这里插入图片描述
接下来,客户端每次向服务端发送请求时都会带上该Cookie信息,包含seesionId,服务器读取该Cookie即可获得此次请求的sessionId

4、Session有什么缺点
A服务器存储了Session,进行负载均衡后,请求转发到了B,此时B没有A的Session,会导致Session失效

Cookies

主要用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态

Cookie主要用于下面三个目的

1、会话管理
登录、购物车、游戏得分或者服务器应该记住的其它内容

2、个性化
用户偏好、主题或者其他设置

3、追踪
记录和分析用户行为

JWT和Seesion Cookies的对比

在这里插入图片描述
没有保存状态时,无法进行单点登录
JWT和Session Cookies都是用来处理不同页面切换时用户登录信息能够保存下来的机制

在这里插入图片描述
使用seeionId来单点登录

什么是JWT?

通常也称为JSON令牌
JWT主要用于下面两点

1、认证 (Authorization) 这是使用JWT最常见的一种情况,一旦用户登录,后面每个请求都会包含JWT,从而允许用户访问该令牌所允许的路由、服务和资源。单点登录时当今广泛使用JWT的一项功能,因为它的开销很小

2、信息交换 JWT是能够安全传输信息的一种方式,通过使用公钥、私钥对JWT进行签名认证

JWT的格式

Header
Payload
Signature

在这里插入图片描述
Header:JWT的标头,一般由令牌的类型和使用的签名算法组成

{
	"alg":"HS256",
	"typ":"JWT"
}

PayLoad

Token的第二部分是PayLoad,PayLoad中包含一个声明,声明是有关实体(通常是用户)和其他数据的声明,共有三种类型的声明:
registered,public,privatre声明

  • registered声明 包含一组建议使用的预定义声明,主要包括
    在这里插入图片描述
  • public声明
    公共的声明,一般添加用户的相关信息或其他业务需要的必要信息,但不建议添加敏感信息
  • private声明
    自定义声明,旨在在同一使用它们的各方之间共享信息,既不是注册声明也不是公共声明
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

signature:
JWT的第三个部分是一个签证信息,由三个部分组成
header (base64后的)
payload (base64后的)
secret

例如

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

签名用于验证消息在此过程中没有更改
上面的信息拼凑在一起,就得到了token

JWT和Session Cookies的不同

1、密码签名
JWT有加密签名 Session Cookies则没有

2、JSON是无状态的
JWT是无状态的,因为声明被存储在客户端,而不是服务端内存中

身份验证可以在本地进行,而不是在请求必须通过服务器数据库或类似位置中进行

3、可扩展性
JWT是无状态的,可以节省服务器资源

4、JWT支持跨域认证
Session Cookies只能用在单节点的域或者它的子域中有效,使用JWT可以进行跨域认证

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

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

相关文章

(二)大模型调用

一、基本概念 1.1、Prompt 大模型的所有输入,即,我们每一次访问大模型的输入为一个 Prompt, 而大模型给我们的返回结果则被称为 Completion。 1.2、Temperature LLM 生成是具有随机性的,在模型的顶层通过选取不同预测概率的预测结…

SOLIDWORKS 2025 PDM 更新亮点:效率与性能的提升!

SOLIDWORKS PDM 持续致力于为用户提供更加高效、直观且灵活的数据管理解决方案。SOLIDWORKS 2025 也对PDM功能进行了多方面的改进,旨在提高工作效率,并增强系统性能。 以下是SOLIDWORKS 2025 PDM中的几项关键功能的详细介绍。 1经过改进的材料明细表可…

【C++】面向对象编程的三大特性:深入解析多态机制

C语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现Vector使用及其模拟实现List使用及其模拟实现容器适配器Stack与QueuePriori…

这次PostgreSQL事故后,我把表膨胀清理工具撸了一遍

📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…

预训练技巧:在训练末尾对领域数据上采样

1. 简介 介绍了一种在模型训练结尾对领域数据上采样能够提升在benchmark上的指标。通过实验表明上采样比例在10-20%是能够在通用语言能力与目标benchmark保持权衡的最好比例。 2. 实验 数据:1T模型:decoder-only结构,7B大小,具…

Linux:进程间通信之共享内存

我们无论使用命名管道还是匿名管道,都是在文件层面上实现的通信,实际上还有基于系统层面的system v标准的进程间通信方式。 因为操作系统不相信用户,所以用户使用的时候只能通过调用的方式 进程间通信的本质:先让不同的进程看到…

C++中list类的使用及模拟实现

目录 1.C中list的底层结构 2.C中list容器各个接口函数的使用 3.迭代器的分类 3.1从功能上进行分类 3.2从性质上进行分类 4.list的结构 5.list的模拟实现 5.1默认成员函数(Member functions) 5.1.1构造函数(constructor) 5.1.1.1默认构造函数 5.1.1.2 initializer …

OSError: [WinError 126] 找不到指定的模块。 Error loading \torch\lib\fbgemm.dll“

遇到问题: 在使用torch 、 或者任何设计到torch的库中,只要导入torch就会报错 解决方案 https://blog.csdn.net/Changxing_J/article/details/140489278 https://blog.csdn.net/weixin_43591849/article/details/140715890(最终这个解决&…

初识Linux · 进程终止

目录 前言: 进程终止在干什么 进程终止的3种情况 进程如何终止 前言: 由上文的地址空间的学习,我们已经知道了进程不是单纯的等于PCB 自己的代码和数据,进程实际上是等于PCB mm_struct(地址空间) 页表 自己的代码和数据。…

LLM 构建Data Multi-Agents 赋能数据分析平台的实践之⑥:NL2SQL技术探讨

一、概述 NL2SQL(Natural Language to SQL)是一种将自然语言转换为结构化查询语言的技术。它可以帮助用户通过使用自然语言来与数据库进行交互,而无需了解复杂的SQL语法。 NL2SQL技术的背景: 随着人工智能的发展,越…

prometheus + alertmanager + PrometheusAlert实现告警

prometheus 收集监控数据 alertmanager 制定告警路由 PrometheusAlert 连通告警webhook 一、prometheus配置 https://prometheus.io/download/ 1.1、prometheus安装 包的下载直接wget就行,放在data目录下,解压后在prometheus目录下创建config和rule目录 配置了热重启&#…

聊一聊 C#中有趣的 SourceGenerator生成器

一:背景 1. 讲故事 前些天在看 AOT的时候关注了下 源生成器,挺有意思的一个东西,今天写一篇文章简单的分享下。 二:源生成器探究之旅 1. 源生成器是什么 简单来说,源生成器是Roslyn编译器给程序员开的一道口子&am…

vxe-grid给单元格加上触发事件

效果&#xff1a;输入框的双击事件(其他事件可以由此替换) 代码 // gridTableOptions是每列的配置项 <vxe-grid v-bind"gridTableOptions" :data"goodsList" ref"xTable">// edit_spbh 是对应的样式名&#xff0c;是写在gridTableOption…

如何通过日志快速定位TTS的缓存放音文件(mod_cti基于FreeSWITCH)

文章目录 前言联系我们分析过程1. 测试话术&#xff0c;记录日志2. 关键词搜索 前言 顶顶通呼叫中心中间件在运行话术时&#xff0c;如果有通过TTS合成的语音&#xff0c;会被freeswitch缓存在目录中&#xff1a;/ddt/fs/storage/http_file_cache。 我们可以分析freeswitch日志…

学习Webpack中图片-JS-Vue-plugin

目录 图片文件资源模块类型 JS文件babel命令行使用babel-loaderbabel-preset Vue文件vue-loadervue/compiler-sfc pluginCleanWebpackPluginHtmlWebpackPluginDefinePlugin 图片文件 需要先在项目中使用图片&#xff0c;比较常见的使用图片的方式是两种&#xff1a; img元素&…

LeetCode 918. 环形子数组的最大和

原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的环形整数数组 nums &#xff0c;返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上&#xff0c; nums[i] 的下一个元素是 nums[(i 1) % n…

基于STM32的智能室内空气质量监控系统

目录 引言项目背景环境准备 硬件准备软件安装与配置系统设计 系统架构关键技术代码示例 传感器数据采集与处理空气质量分析与报警显示与数据记录功能应用场景结论 1. 引言 智能室内空气质量监控系统用于实时监测环境中的空气质量&#xff0c;通过检测空气中的CO2、PM2.5、温…

软件测试学习笔记丨Pytest 学习指南

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32336 基本介绍 pytest框架是一个成熟&#xff0c;全面的测试框架&#xff0c;具有非常丰富的第三方插件&#xff0c;并且可以自定义扩展 比如&#xff1a;pytest-selenium , pytest-html ,…

Git常用方法——详解

一、下载安装git git官网&#xff1a; Git - Downloads (git-scm.com) 下载安装Git&#xff08;超详细超简单&#xff09;_git下载-CSDN博客 二、克隆下载至本地 1、复制HTTPS链接 在gitee或者gitLab或者gitHub上复制HTTPS链接 2、打开Open Git Bash here 在本地想要新建文…

小程序原生-列表渲染

1. 列表渲染的基础用法 <!--渲染数组列表--> <view wx:for"{{numList}}" wx:key"*this" > 序号&#xff1a;{{index}} - 元素&#xff1a;{{item}}</view> <!--渲染对象属性--> <view wx:for"{{userInfo}}" wx:key&q…