Cookie、Session、Token的区别

有人或许还停留在它们只是验证身份信息的机制,但是它们之间的关系你真的弄懂了么?

发展史:

Coolie:

       Netscape Communications 公司引入了 Cookie 概念,作为在客户端存储状态信息的一种方法。初始目的是为了解决 HTTP 的无状态性,使网站能够记住用户并保持状态。

Session:

HTTP 1.0 引入了基本的会话管理,通过在请求头中添加 "Cookie" 字段来传递会话标识符。

Token:

       随着移动应用和 API 的兴起,基于 Token 的身份验证得到了更多关注和应用。OAuth 2.0 的标准化推动了令牌在 web 开发中的应用,支持无状态的身份验证和授权。


       在以前,你去登录一个网站,没有个人的分别,所以也区不区分也无关紧要,但是随着互联网的发展,互联网越来越重视你是谁?所以cookie就诞生了,它是一个存储在客户端的一小段数据,当用户登录的时候,由服务端发送给客户端并存储在客户端本地,这样就可以验证用户信息

但是这样岂不对程序员美滋滋,我们假设有一个小穷(程序员)还有一个老富(顶级富豪)

账户转钱:

老富:

 小穷:

 有一天,小穷通过技术手段搞到了老富的cookie,结果小穷差点吃公家饭 

 

       基于cookie这种不安全性,session逐渐问世,它是一种会话机制,用户信息存储在服务器上,这样就相对于cookie比较安全

 小穷这时候留下了悔恨的眼泪!!!

       但是随着时代的发展,由于用户越来越多,一台服务器已经扛不住了,单体架构逐渐被淘汰,分布式逐渐登上了历史的舞台,这时候,问题又来了,由于分布式是采取负载均衡的方式采取服务器请求的,所以我们不能仅限于一台服务器进行存储session,总不能每次发送请求的时候都要进行一次身份验证,那么当时就有两种情况可以解决这个问题:

1.单独拎出来一个服务器,专门作为session的验证

2.在每个服务器上都存储一份session

       这两种方式显然对资源的一种浪费,数以千万计的用户的session占用的内存可不是一个小数目,所以我们的下一个主角又登场了——Token

         Token是一种轻量级的身份验证和授权机制,一般是一小段字符串,当每次用户成功登录或请求时,服务器会生成一个Token(用户ID、角色、权限以及一些元数据),通过使用密钥对其进行加密和签名确保安全性,下一次客户端访问时携带Token,服务器用相同的密钥进行解密和检验签名,确保安全性

 使用Token的效果既保障了安全问题又避免了资源浪费

 Token的优点真的数不胜数,列几点:

  • 安全性:经过了层层加密(加密和签名)确保完整性和安全性
  • 无状态:服务器不需要在本地存储会话数据,不需要维护会话状态,更加容易扩展与分布式部署
  • 跨域支持:Token可以通过HTTP请求头、URL参数或者Cookie发送
  • 灵活性:携带自定义的用户信息
  • 性能:无需服务器存储和查询会话状态,提供服务器的性能和响应速度
  • 轻量级:比传统的会话更加轻量级(不需要在服务器上存储状态信息)
  • 可扩展性:方便的扩展以及适应不同的需求
  • 单点登录:登录一次访问多个关联应用
  • 可移植性:不依赖于特定的编程语言

Cookie:

       Cookie是存储在用户浏览器中的小段数据,由服务器发送给客户端并存储在客户端本地。它通常用于持久性存储一些用户相关的信息,如登录凭证、用户偏好设置等,Cookie可以设置过期时间,可以是会话级别的(在用户关闭浏览器后过期)或者是长期的(设置特定的过期时间),由于存储在客户端,Cookie可以在用户访问不同页面时被浏览器自动发送到服务器

Session:

       会话是一种服务器机制,用于跟踪用户在网站上的活动,服务器在用户访问网站时为每个用户创建一个唯一的会话标识(Session ID),这个标识存储在Cookie中或者通过URL参数传递,然后,服务器可以根据会话标识来识别特定的用户,并在服务器端存储用户状态信息,以便跟踪用户的状态和数据,会话数据通常在服务器上存储,因此相对安全

Token:

       Token是一种轻量级的身份验证和授权机制,广泛用于构建于API的 应用和单点登录系统,用户登录后,服务器会颁发一个Token,包含有关用户身份的信息和一些元数据,这个Token被用户保存,并在每次向服务器发送请求时随请求一起发送,服务器可以验证Token的有效性,并根据Token中的信息执行身份验证和授权,Token可以是短期的,也可以是长期的,但是为了安全性通常会有过期时间

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

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

相关文章

Python爬虫:单线程、多线程、多进程

前言 在使用爬虫爬取数据的时候,当需要爬取的数据量比较大,且急需很快获取到数据的时候,可以考虑将单线程的爬虫写成多线程的爬虫。下面来学习一些它的基础知识和代码编写方法。 一、进程和线程 进程可以理解为是正在运行的程序的实例。进…

python爬虫数据解析xpath、jsonpath,bs4

数据的解析 解析数据的方式大概有三种 xpathJsonPathBeautifulSoup xpath 安装xpath插件 打开谷歌浏览器扩展程序,打开开发者模式,拖入插件,重启浏览器,ctrlshiftx,打开插件页面 安装lxml库 安装在python环境中的Scri…

剑指Offer61.扑克牌中的顺子 C++

1、题目描述 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。…

并发服务器模型,多线程并发

一、多线程并发完整代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <stdlib.h> #include <…

突然让做性能测试?试试RunnerGo

当前&#xff0c;性能测试已经是一名软件测试工程师必须要了解&#xff0c;甚至熟练使用的一项技能了&#xff0c;在工作时可能每次发版都要跑一遍性能&#xff0c;跑一遍自动化。性能测试入门容易&#xff0c;深入则需要太多的知识量&#xff0c;今天这篇文章给大家带来&#…

Rocky Linux更换为国内源

Rocky Linux提供的可供切换的源列表&#xff1a;Mirrors - Mirror Manager 其中以 COUNTRY 列为 CN 的是国内源。 选择其中一个Rocky Linux 源使用帮助 — USTC Mirror Help 文档 操作前请做好备份 对于 Rocky Linux 8&#xff0c;使用以下命令替换默认的配置 sed -e s|^mirr…

新能源汽车电控系统

新能源汽车电控系统主要分为&#xff1a;三电系统电控系统、高压系统电控系统、低压系统电控系统 三电系统电控系统 包括整车控制器、电池管理系统、驱动电机控制器等。 整车控制器VCU 整车控制器作为电动汽车中央控制单元&#xff0c;是整个控制系统的核心&#xff0c;也是…

zabbix监控mysql数据库、nginx、Tomcat

zabbix监控mysql数据库、nginx、Tomcat 一.zabbix监控mysql数据库 1.环境规划 hostIP部署zabbix-server192.168.198.17zabbix服务器搭建zabbix-mysql192.168.198.15zabbix客户端搭建 2.zabbix-server安装部署&#xff08;192.168.198.17&#xff09; 请参考以下配置&#…

Azure概念介绍

云计算定义 云计算是一种使用网络进行存储和处理数据的计算方式。它通过将数据和应用程序存储在云端服务器上&#xff0c;使用户能够通过互联网访问和使用这些资源&#xff0c;而无需依赖于本地硬件和软件。 发展历史 云计算的概念最早可以追溯到20世纪60年代的时候&#x…

mysql 分库分表浅析

分表是分散数据库压力的好方法。 分表&#xff0c;最直白的意思&#xff0c;就是将一个表结构分为多个表&#xff0c;然后&#xff0c;可以再同一个库里&#xff0c;也可以放到不同的库。 当然&#xff0c;首先要知道什么情况下&#xff0c;才需要分表。个人觉得单表记录条数达…

2023河南萌新联赛第(五)场:郑州轻工业大学C-数位dp

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 给定一个正整数 n&#xff0c;你可以对 n 进行任意次&#xff08;包括零次&#xff09;如下操作&#xff1a; 选择 n 上的某一数位&#xff0c;将其删去&#xff0c;剩下的左右部分合并。例如 123&#xff0c;你可以选择…

年至年的选择仿elementui的样式

组件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 时间选择年 - 年 --> <template><div class"yearPicker"…

Smart HTML Elements 16.1 Crack

Smart HTML Elements 是一个现代 Vanilla JS 和 ES6 库以及下一代前端框架。企业级 Web 组件包括辅助功能&#xff08;WAI-ARIA、第 508 节/WCAG 合规性&#xff09;、本地化、从右到左键盘导航和主题。与 Angular、ReactJS、Vue.js、Bootstrap、Meteor 和任何其他框架集成。 智…

九、多态(2)

本章概要 构造器和多态 构造器调用顺序继承和清理构造器内部多态方法的行为 协变返回类型使用继承设计 替代 vs 扩展向下转型与运行时类型信息 构造器和多态 通常&#xff0c;构造器不同于其他类型的方法。在涉及多态时也是如此。尽管构造器不具有多态性&#xff08;事实上…

【JavaScript】new 的原理以及实现

网道 - new 命令的原理 使用new命令时&#xff0c;它后面的函数依次执行下面的步骤。 创建一个空对象&#xff0c;作为将要返回的对象实例。将这个空对象的原型&#xff0c;指向构造函数的prototype属性。将这个空对象赋值给函数内部的this关键字。如果构造函数返回了一个对象…

版本动态 | SolidUI 0.2.0 版本发布

SolidUI 一句话生成任何图形 背景 随着文本生成图像的语言模型兴起&#xff0c;SolidUI想帮人们快速构建可视化工具&#xff0c;可视化内容包括2D,3D,3D场景&#xff0c;从而快速构三维数据演示场景。SolidUI 是一个创新的项目&#xff0c;旨在将自然语言处理&#xff08;NLP&…

[SpringCloud] 组件性能优化技巧

Feign 配置优化hystrix配置 优化ribbon 优化Servlet 容器 优化Zuul配置 优化 文章目录 1.Servlet 容器 优化2.Feign 配置优化3.Zuul配置 优化4.hystrix配置 优化5.ribbon 优化 1.Servlet 容器 优化 默认情况下, Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器, 可以将 We…

在Visual Studio上,使用OpenCV实现人脸识别

1. 环境与说明 本文介绍了如何在Visual Studio上&#xff0c;使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示&#xff0…

Linux命令200例:adduser用于创建新用户

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &…

代理模式【Proxy Pattern】

什么是代理模式呢&#xff1f;我很忙&#xff0c;忙的没空理你&#xff0c;那你要找我呢就先找我的代理人吧&#xff0c;那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧&#xff0c;那就是两个人具备同一个接口&#xff0c;代理人虽然不能干活&#xff0c;但是被 代…