【Cookie,Session,Token,JWT的区别】

一、Cookie

  1. Cookie 是在 HTTP 协议下,维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器上的小文本数据文件,它可以包含有关用户的信息。cookie是不可跨域的,每个cookie都会绑定一个单一的域名,并只能在指定的域名下使用
  2. Cookie就相当于在客户的浏览器上的一个HashMap,存储着服务器端返回的CookieName,和CookieValue,一般这个CookieValue由服务开发者决定(有可能是sessionId,有可能是token,也有可能是JWT)
  3. cookie的优点
    1. 可配置到期规则 Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则
    2. 简单性 Cookie 是一种基于文本的轻量结构,包含简单的键值对。
    3. 数据持久性 虽然客户端计算机上 Cookie 的持续时间取决于客户端上的 Cookie 过期处理和用户干预,Cookie 通常是客户端上持续时间最长的数据保留形式。
    4. 浏览器可以自动保存服务端返回的cookie信息
  4. cookie的缺点
    1. 大小受到限制 大多数浏览器对 Cookie 的大小有 4096 字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。
    2. 用户配置为禁用 有些用户禁用了浏览器或客户端设备接收 Cookie 的能力,因此限制了这一功能。
    3. 潜在的安全风险 Cookie 可能会被篡改。用户可能会操纵其计算机上的 Cookie,这意味着会对安全性造成潜在风险或者导致依赖于 Cookie 的应用程序失败。另外,虽然 Cookie 只能被将它们发送到客户端的域访问,历史上黑客已经发现从用户计算机上的其他域访问 Cookie 的方法。您可以手动加密和解密 Cookie,但这需要额外的编码,并且因为加密和解密需要耗费一定的时间而影响应用程序的性能。

二、Session

  1. session记录服务器和客户端会话状态的机制。session在服务端生成和保存,并转化为一个临时的Cookie(sessionId)发送给客户端,当客户端第一次请求服务器时,会检查是否携带了这个Session,如果没有则会添加Session。session这种会话存储方式方式只适用于客户端代码和服务端代码运行在同一台服务器上(前后端项目协议、域名、端口号都一致,即在一个项目下)
  2. Session就相当于在服务器上的一个HashMap,存储着SessionName,和SessionValue,这个SessionName一般就是客户的cookie传来的sessionId,SessionValue一般是登录者的认证和授权信息
  3. session的优点
    1. 高效性:Session是基于服务器的,因此在浏览器和服务器之间需要的信息量很小。因此,Session交互可以在Web中很好地处理
    2. 安全性:Session是在服务器上存储的,所有的数据都在服务器上加密传输并存储。
    3. 可定制性:Session可以被自定义,允许应用程序开发人员或管理员选择Session的持续时间、大小、编码等参数
  4. session的缺点
    1. 扩展性:每个Session都需要在服务器上进行保存,这样如果公司的用户量特别大,那么需要的服务器成本将大大增加。另外,由于Session是在服务器上存储的,这意味着它们不适用于大规模分布式环境
    2. 因为Session是基于后端的,如果服务器故障或重启,那么所有的Session都会被清理

三、Token

  1. token一般来说就是一个随机字符串id,是令牌,访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。一般来说,token实际存储的信息需要从DB重新获取
  2. token的优点
    1. 灵活性:Token可以用于任何身份验证方案,并且可以在多种安全设施下使用。
    2. Token强制实行无状态性,这意味着应用程序无需在每个请求中添加没有必要的Session数据,并且可以轻松地扩展到多个Web服务器。
  3. token的缺点
    1. 令牌可能被窃取并用于攻击
    2. token还是需要DB存储对应的用户信息

四、JWT

  1. JSON Web Token(简称 JWT)认证授权机制,是目前最流行的跨域认证解决方案
  2. 用户的状态不再存储在服务端的内存中,所以这是一种无状态的认证机制。
  3. 可以使用 HMAC 算法或者是 RSA 的公/私秘钥对 JWT 进行签名。因为数字签名的存在,这些传递的信息是可信的。
  4. JWT一般来说,已经包含了用户的认证和授权信息,只需要客户端传过来,服务端解密就行
  5. JWT的优点
    1. 有token的所有优点
    2. JWT本身包含了用户信息,无需服务端存储用户信息
  6. JWT的缺点
    1. JWT过期无法服务端操作
    2. 令牌可能被窃取并用于攻击

五、理论上来说

  1. 可以用cookie存储token,JWT,sessionId任意一种数据
  2. 也可以在header中传输token,JWT
  3. cookie,session最主要的就是标准实现,存sessionId,传sessionId,取session信息
  4. 服务端如果用token,建议使用缓存保存token对应的用户认证授权信息
  5. 如果是JWT,则不需要保存任何用户信息,直接解密即可,但是需要考虑JWT无法手动过期问题
  6. 即使用token,JWT,客户端可以用cookie保存,也可以从参数,header传过来,服务端可以用session保存信息,也可以用缓存保存信息

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

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

相关文章

Python 基础02-Python 入门

官方文档:3.10.13 Documentation 一、Python 代码编写习惯 1. Python 中的编码 在 Python 3 版本之后,Python 默认使用 UTF-8 编码。UTF-8 是一种针对 Unicode 的可变长度字符编码。 2. 注释 注释可以对代码起到解释说明的作用,注释内容…

Linux的启动过程,了解一下?

Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 init程序的类型: SysV: init, CentO…

PVE8.1安装DSM 7.2

PVE8.1,安装和优化PVE8.1安装DSM 7.2,设置虚拟机具体操作DSM安装引导详细篇,rr引导激活套件Active Backup for Business 方法一,方法二PVE控制synology开关机,安装Qemu Guest Agent

linux——yum工具详解

yum是linux中自动解决软件包依赖关系的管理器 同时,yum也是一个rpm软件 这里使用yum install nginx安装nginx

CommunityToolkit.Mvvm笔记---ObservableValidator

ObservableValidator 是实现 INotifyDataErrorInfo 接口的基类,它支持验证向其他应用程序模块公开的属性。 它也继承自 ObservableObject,因此它还可实现 INotifyPropertyChanged 和 INotifyPropertyChanging。 它可用作需要支持属性更改通知和属性验证的…

目标检测中加入背景样本的思考,基于NanoDetPlus的QualityFocalLoss(原创)

文章目录 引言训练集加入无目标图像的作用NanoDetPlus的损失函数无目标图像在训练时怎么计算loss 引言 在目标检测的很多应用场景中,大多数情况下视野中是不存在检测目标的,但是在这些无目标场景下,又很容易出现误检框。为了解决这个问题&am…

Oracle解析exp、imp及常见的问题

前言 在工作中经常需要不同数据库的导入和导出。exp和imp可以实现数据的迁移。 exo会转储产生对应的二进制文件,里面包括数据的定义信息、数据内容等,即为dump文件。 下面是使用exp和imp的一些场景 exp和imp主要有4中模式: 1)数据库模式 数据库模式也就是我们说的全备…

新手理解Hugging Face:与Docker Hub对比,理解Hugging Face到底是啥东西

可以将Hugging Face类比为Docker Hub,但它们之间有一些关键区别。我们将分别解释它们的相似之处和不同之处。 相似之处: 集中存储:Hugging Face Hub和Docker Hub都是集中式存储库,提供了一个可供用户查找、分享和使用的模型或镜…

产品经理常用工具汇总

英文名称中文名称描述Axure原型原型图,流程图,框架图,原型图;Axhub团队原型共享Axure原型团队共享,链接转发;iconfont阿里矢量图标图标下载,协助原型和方案;visio流程图 业务流程图&…

k8s安装记录

k8s安装记录 如无特别说明,则该步操作指在所有的机器上执行!!! 如无特别说明,则该步操作指在所有的机器上执行!!! 如无特别说明,则该步操作指在所有的机器上执行&#…

CSS——前端笔记

CSS 1、选择器1.1、基础选择器1.2、复合选择器1.2.4、伪类选择器 1.3、属性选择器1.4、结构伪类选择器1.5、伪元素选择器 2、CSS的元素显示模式2.1、块元素2.2、行内元素2.3、行内块元素2.4、元素显示模式转换 3、字体属性3.1、font-family 字体3.2、font-size 字体大小3.3、fo…

Three.js加载glb / gltf模型,Vue加载glb / gltf模型(如何在vue中使用three.js,vue使用threejs加载glb模型)

简介:Three.js 是一个用于在 Web 上创建和显示 3D 图形的 JavaScript 库。它提供了丰富的功能和灵活的 API,使开发者可以轻松地在网页中创建各种 3D 场景、模型和动画效果。可以用来展示产品模型、建立交互式场景、游戏开发、数据可视化、教育和培训等等…

常用的数据结构及算法

一、数据结构 (一)线性结构:一对一。 1.可以使用数组、链表来表示。数组又分为静态数组和动态数组两种。链表常用的是单链表。 2.两种特殊的线性结构:队列和栈。其中队列是先进先出(排队),栈…

SpringBoot3 集成Springdoc 实现Swagger3功能

说明: 只通过引用org.springdoc 的两个包就可以使用Swagger3 功能(步骤1);如想更美观及实现动态认证的开启与关闭,及Swagger3登录认证等功能,需实现(步骤1、2、3)的配置; 1、 引包…

chrome浏览器查看css样式

样式的查看 1.匹配器为灰色文本: 表示非当前选择器 2.样式有划线标识:CSS属性无效或未知 / 属性值无效 / 被其他属性覆盖的属性 3.属性以浅色文本显示且有感叹号提示:属性虽然有效,但由于CSS逻辑而没有任何影响 转自:…

2024HW --->蓝队面试题

这段时间在写横向移动,搞得鸽了很久(内网真的很玄学) 还没写完。。。 但是这不是准备HW了吗。小编也来整理一下自己收集到的题目吧!!! (仅为个人见解,不代表最终答案)&…

react中useState的值没有改变,而是旧的数值

问题背景 想实现点击按钮就改变数据的效果,但是在控制台的打印结果,总是上一次的修改情况,并不是最新的修改后的数据 代码: import { useState, useRef } from "react";// 实现sonA的数据传递给sonB const SonA () …

C语言联合体详解

下午好诶,今天小眼神给大家带来一篇C语言联合体详解的文章~ 目录 联合体 1. 联合体类型的声明 2. 联合体的特点 代码一: 代码二: 3. 相同成员的结构体和联合体对比 ​编辑4. 联合体大小的计算 5. 联合体的优点 联合体 1. 联合体…

软件开发技术栈整理

Java基础 OOP(面向对象编程)-CSDN博客 Jdk和Jre的区别-CSDN博客 数据结构和算法 八大数据结构-CSDN博客 十大经典排序算法-CSDN博客 Spring框架 Spring框架核心模块-CSDN博客 Mybatis框架 MyBatis体系架构_mybatis equal-CSDN博客 数据库 Mysql架构体系_mysql体系架构…

第62天:服务攻防-框架安全CVE 复现SpringStrutsLaravelThinkPHP

目录 思维导图 常见语言开发框架: 案例一:PHP-开发框架安全-Thinkphp&Laravel Thinkphp3.2.x日志泄露 自动化脚本检测 如何getshell 手工注入 ​ThinkPHP5 5.0.23 手工注入 工具检测 laravel-cve_2021_3129 案例二:JAVAWEB-开…