当前位置: 首页 > 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;字符型常量…...

Flowable 7.x 实战:手把手教你从数据库里捞出BPMN2.0 XML并优雅展示(Vue3 + Spring Boot)

Flowable 7.x 实战&#xff1a;从数据库提取BPMN2.0 XML的工程化实现&#xff08;Vue3 Spring Boot全链路解析&#xff09; 在流程引擎的实际应用中&#xff0c;BPMN2.0 XML作为流程定义的标准化载体&#xff0c;其可视化展示能力直接影响开发调试效率。本文将完整演示如何构建…...

OpenCV4编译后pkg-config失效?教你如何正确生成opencv4.pc文件(附完整CMake参数)

OpenCV4编译实战&#xff1a;从源码构建到pkg-config配置全解析 在Linux环境下从源码编译OpenCV4是许多计算机视觉开发者的必经之路&#xff0c;但不少人在成功编译后却发现pkg-config --modversion opencv命令报错"找不到opencv包"。这并非你的操作失误&#xff0c;…...

Win11Debloat:终极Windows系统清理工具,一键提升电脑性能的完整指南

Win11Debloat&#xff1a;终极Windows系统清理工具&#xff0c;一键提升电脑性能的完整指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执…...

从 Spotlight 到 Raycast:一个 Mac 效率控的深度迁移与自定义指南

1. 为什么我从 Spotlight 迁移到 Raycast 作为一个用了十年Mac的老用户&#xff0c;我几乎每天都要和Spotlight打交道。从最初的简单文件搜索&#xff0c;到后来的计算器、词典功能&#xff0c;Spotlight确实帮了我不少忙。但直到去年发现Raycast&#xff0c;我才意识到原来Ma…...

如何用stressapptest进行高效内存和磁盘压力测试?实战案例分享

如何用stressapptest进行高效内存和磁盘压力测试&#xff1f;实战案例分享 在服务器运维和硬件性能评估中&#xff0c;内存和磁盘的稳定性直接关系到系统的可靠性。想象一下&#xff0c;当你的服务器在凌晨三点突然因为内存错误崩溃&#xff0c;或者磁盘在高峰期出现读写异常&a…...

Qwen2.5-VL-7B-Instruct实操手册:对话历史自动保存+一键清空功能详解

Qwen2.5-VL-7B-Instruct实操手册&#xff1a;对话历史自动保存一键清空功能详解 1. 开篇&#xff1a;你的全能视觉助手来了 今天给大家介绍一个特别实用的工具——基于Qwen2.5-VL-7B-Instruct多模态大模型的视觉交互工具。这个工具专门为RTX 4090显卡优化过&#xff0c;用上了…...

3步打造极速安全系统:AtlasOS开源优化方案全解析

3步打造极速安全系统&#xff1a;AtlasOS开源优化方案全解析 【免费下载链接】Atlas &#x1f680; An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/Atl…...

8255A工作方式0实战:手把手教你用汇编语言驱动八路抢答器LED与数码管

8255A工作方式0实战&#xff1a;从零构建八路抢答器驱动框架 记得第一次在实验室见到8255A芯片时&#xff0c;那块黑色的DIP封装器件看起来平平无奇&#xff0c;直到它让八颗LED随着我的汇编指令跳起"灯光芭蕾"。本文将带你深入这个经典可编程并行接口芯片的实战应用…...

统信系统下如何管理Mysql?

背景 看到标题很多朋友会打趣的问我&#xff1a;“你不是一直用麒麟操作系统做讲解吗&#xff1f;”&#xff0c;其实DBCS和DESK的兼容性太强了&#xff0c;什么操作系统都行&#xff0c;Windows上最容易了&#xff0c;所以我一般不用Windows&#xff0c;下次我用Ubuntu给大家…...

MAA明日方舟自动化助手:5分钟快速上手指南

MAA明日方舟自动化助手&#xff1a;5分钟快速上手指南 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights MAA&#xff08;MaaAssistantArknights&#xff09;是一款专为《明日方…...