当前位置: 首页 > news >正文

简析Cookie、Session、Token


手打不易,如果转摘,请注明出处!
注明原文:https://zhangxiaofan.blog.csdn.net/article/details/133498756


文章目录

  • 简析Cookie、Session、Token
    • 什么是 Cookie ?
    • 什么是 Session ?
    • Cookie 和 Session 到底是什么关系?
    • 什么是 Token ?
    • Session VS Token ?
    • 总结

简析Cookie、Session、Token

什么是 Cookie ?

  1. cookie 存储在前端
    例如第一次请求后端,会创建一个 sessionId 返回给前端,那么前端就会把 sessionId:xxxx 保存到 cookie 中, 下次请求的时候,前端会携带这个数据发送到后端。
  2. cookie 无法跨域
  3. cookie 只支持存储字符串数据, 大部分浏览器都不能超过 4KB

例如某次访问CSDN中的cookie

{Cookie: JSESSIONID=5124fa26-9334-4c7d-9123-6141b14b9c92;uuid_tt_dd=10_20850520640-1656988062941-486962;UserName=qXXXX4;UserInfo=8d100c5XXX4dd7a3fbc5e97;UserToken=8d100c5XXX0f4dd7a3fbc5e97;UserNick=Mr.XXX.;...
}

什么是 Session ?

  1. session 存储在后端
    session 用于记录前后端会话信息,本身是基于 cookie 实现的,session 存储在后端(例如:redis),sessionId 则存储在前端的 cookie 中。因此 session 相对来说更安全。
    简单的来说:sessionID 是连接 Cookie 和 Session 的一道桥梁
    注意:这并不是说它是唯一的桥梁,我们也可以在 sessionId 拼接在请求 url 的 parameter 中。
  2. session 能存储任意Object对象,大小理论上不限制,只要内存够。

一般session存哪些信息?
例如 org.apache.shiro.session.mgt.SimpleSession 就存储了以下信息:

private transient Serializable id;
private transient Date startTimestamp;
private transient Date stopTimestamp;
private transient Date lastAccessTime;
private transient long timeout;
private transient boolean expired;
private transient String host;
private transient Map<Object, Object> attributes;

包括:id、时间戳、过期时间、host、各种属性 attributes Map等等。

Cookie 和 Session 到底是什么关系?

网上一大把的文章都在对比 cookie 和 session。
严格来说, cookie 是一种存储方式, session 是会话记录。它们不应该看成一个维度的概念
相同点就是它们都可以用来存储用户信息。
cookie 安全性、存储量有一定限制,但不会占用服务端资源。
session 安全性高、存储信息大,认证会话信息一般都存放在 session。
cookies 只是一种可以用来实现 session 的方式,但并不是唯一,理论上只要 sessionId 可以通过其他安全方式传输到服务端就行。
我也是比较 反对直接拿 cookie 和 session 做对比的
因此笔者认为,如果非要加一层关系,那么可以看成 协作互补

什么是 Token ?

说到 token ,这里必须说一下 token 可以简单看成 2 大类型:
一种是本身不携带信息的token(传统token);
一种是本身就携带用户或认证信息的 token(例如JWT);
sessionId 就可以看成一个传统的 token

token 就是一个令牌,前端请求发送到服务端,验证成功后,后端会生成一个 token 给前端,前端下次请求(有效期内)只需要带着这个 token 就可以访问后端API。
对于传统的 Token 来讲,服务端拿到 token 后需要去查数据库(Mysql、Redis等)校验是否过期或者是否有效
对于JWT这种类型的 Token 来讲,服务端本身是不存储信息的,直接通过解密和验证JWT即可。

Session VS Token ?

很多人直接把这两者进行比较,这样容易受误导。因为 Token 是有不同的实现方式,有的携带认证信息,有的不携带认证信息,那么在比较的时候,就要区分开来。

  1. session 是把会话信息到了服务端, 让本身无状态的 HTTP 变得有状态, 而 Token 是为了让服务端无状态.
  2. session 存储用户信息到服务端后,返回 sessionId 给前端,用于 sessionId 的随机性,所以可以看成 session 存储是安全的。 传统的 token 也需要存储信息到服务端,sessionId 就可以看成一个传统的 token。而 JWT这类Token 是本身携带信息的 token,无需存储到后端服务器。
  3. session 可以看成 空间换时间, JWT这类Token 可以看成 时间换空间,传统的 token 实际上也占用了空间。
  4. token 实现跨域更方便,因为本身就是让服务端无状态

总结

  1. Cookie 和 Session 不要直接拿来对比, Cookie 是一种前端存储方式,Session 是存在服务端的会话记录。详情看:Cookie 和 Session 到底是什么关系?
  2. Session 与 Token 做比较的时候,也要区分是 传统Token 还是 JWT之类的token

相关文章:

简析Cookie、Session、Token

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/133498756 文章目录 简析Cookie、Session、Token什么是 Cookie &#xff1f;什么是 Session &#xff1f;Cookie 和 Session 到底是…...

加速attention计算的工业标准:flash attention 1和2算法的原理及实现

transformers目前大火&#xff0c;但是对于长序列来说&#xff0c;计算很慢&#xff0c;而且很耗费显存。对于transformer中的self attention计算来说&#xff0c;在时间复杂度上&#xff0c;对于每个位置&#xff0c;模型需要计算它与所有其他位置的相关性&#xff0c;这样的计…...

小程序获取用户手机号

在小程序中获取用户手机号需要以下步骤&#xff1a; 首先需要授权用户手机号&#xff0c;即在小程序中调用 wx.login() 方法获取用户的登录凭证&#xff0c;在回调函数中调用 wx.getUserInfo() 方法获取用户的个人信息&#xff0c;并且设置 withCredentials 参数为 true。 在获…...

Zama的fhEVM:基于全同态加密实现的隐私智能合约

1. 引言 Zama的fhEVM定位为&#xff1a; 基于全同态加密实现的隐私智能合约 解决方案 开源代码见&#xff1a; https://github.com/zama-ai/fhevm&#xff08;TypeScript Solidity&#xff09; Zama的fhEVM协议中主要包含&#xff1a; https://github.com/zama-ai/tfhe-…...

Mac M1安装ROS1或ROS2

1.首先进入Anaconda官网&#xff0c;安装Anaconda 2.创建、激活并配置环境 #创建环境 conda create -n ROS #激活环境 conda activate ROS #配置环境 conda config --add channels conda-forge conda config --add channels robostack conda config --set channel_priority st…...

[NISACTF 2022]popchains - 反序列化+伪协议

[NISACTF 2022]popchains 一、解题流程二、小小疑惑 一、解题流程 1、链条&#xff1a;Road_is_Long&#xff08;construct->wakeup【page$r】-> toString【string$m】&#xff09;-> Make_a_Change&#xff08;construct->get【effort$t】&#xff09;-> Try_W…...

分贝定义简介

一、什么是分贝 辅助单元Bel表示任何给定部件、电路或系统的输入和输出之间的对数比L,并且可以用电压、电流或功率来表示: 如果使用场量(电压或电流)代替功率量,则: 我们可以将增益或损耗因子相加为正或负dB值,而不是将其乘以比率。 分贝与功率转化的速读表如下所示:…...

socket简介

套接字&#xff08;Socket&#xff09;实质上就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;为应用层进程利网络协议交换数据提供了相应机制。套接字出于承上启下的作用&#xff0c;向上连接应用进程&#xf…...

【AI视野·今日Robot 机器人论文速览 第四十九期】Fri, 6 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Fri, 6 Oct 2023 Totally 29 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;ContactGen, 基于生成模型的抓取手势生成&#xff0c;类人五指手。(from 伊利诺伊大学 香槟) 数据集&#xff1a;GRAB da…...

七、互联网技术——SQL查询

文章目录 一、基础查询二、高级查询三、SQL视图一、基础查询 某学校的教学信息关系数据库中有如下两个表(表的名字和字段均用中文名字)学生表(学号,姓名,性别,专业)成绩表(学号,课程名,分数)用SQL语句表达下述查询:[问题1]检索分数高于80分的所有学生的学号和分数select 学…...

1.6 计算机网络的性能

思维导图&#xff1a; 1.6.1 计算机网络的性能指标 前言&#xff1a; 我的理解&#xff1a; 这段前言主要介绍了关于计算机网络性能的两个方面的讨论。首先&#xff0c;计算机网络的性能可以通过一些重要的性能指标来衡量。但除了这些指标之外&#xff0c;还有一些非性能特征…...

小程序中如何核销订单和优惠券

小程序已成为许多商家线上线下开展业务的重要渠道。客户在小程序中下单/领券后&#xff0c;可能需要商家现场扫码核销&#xff0c;例如超市购物、卖票、游乐园等线下场景。下面就介绍小程序中如何核销订单和优惠券。 一、订单核销 订单核销是指商家在小程序中确认顾客已经支付…...

211 毕业就入职 30 人的小公司是什么体验

为什么“选择”了 30 人的小公司&#xff1f; 作为一个 211 毕业的学生&#xff0c;进入 30 人的小公司不管是 8 年前还是现在&#xff0c;应该都是比较稀少的&#xff0c;但是当面的我阴差阳错进了这样一个小公司。 为什么我选择进入这样一个 30 人的小公司呢&#xff1f;主…...

aardio 读取 Excel文件,显示在 listview 中

编写 main.aardio 如下 import win.ui; /*DSG{{*/ winform win.form(text"excel1";right801;bottom500) winform.add( button1{cls"button";text"读取Excel文件";left19;top14;right126;bottom44;z1}; button2{cls"button";text&quo…...

Web:前端常用的几种Http请求GET和POST样例

1、简述 在Web开发过程中&#xff0c;少不了发起Http请求服务端的接口数据&#xff0c;在不同的框架中使用了不同的Http请求方式&#xff0c;常用的请求有fetch、 ajax、 axios、XMLHttpRequest、request&#xff0c;以下样例仅供参考。 2、Fetch Fetch API 是一种 JavaScr…...

clickonce 发布的winform 如何CA认证?

要为使用ClickOnce发布的WinForms应用程序启用CA&#xff08;证书颁发机构&#xff09;认证&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. **获取数字证书**&#xff1a; - 首先&#xff0c;您需要获得一个数字证书&#xff0c;通常从受信任的CA购买。这个数字证…...

#力扣:13. 罗马数字转整数@FDDLC

13. 罗马数字转整数 一、Java import java.util.HashMap;class Solution {public int romanToInt(String s) {HashMap<Character, Integer> m new HashMap<>() {{put(I, 1);put(V, 5);put(X, 10);put(L, 50);put(C, 100);put(D, 500);put(M, 1000);}};char[] a …...

React18入门(第一篇)——JSX、TSX语法详解

文章目录 一、JSX 语法简介二、和 HTML 标签的几点不同三、JSX 属性四、JSX 事件4.1 简单点击事件4.2 类型限制4.3 带参数&#xff0c;箭头函数 五、插入 JS 变量六、JSX 中使用条件判断七、循环 一、JSX 语法简介 JSX - 是 JS 的扩展&#xff0c;写在 JS 代码里面&#xff0c…...

【计算机基础知识】字符的编码表示

欢迎来到我的&#xff1a;世界 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言1.西文字符编码2.中文字符编码汉字输入码汉字国标码汉字机内码汉字字形码 总结 前言 计算机处理的数据中&#xff0c;除了数值型数据以外…...

【面试题精讲】Java字符型常量和字符串常量的区别?

“ 有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top ” 首发博客地址[1] 面试题手册[2] 系列文章地址[3] Java 中的字符型常量和字符串常量是两种不同的数据类型。 字符型常量&#xff1a;字符型常量…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...