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…

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

一、多线程并发完整代码 #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…

年至年的选择仿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关键字。如果构造函数返回了一个对象…

在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;但是被 代…

解决 Mac 上使用 Electron Updater 更新 App 不成功的问题!!!

文章目录 1. 现象2. 分析并如何解决3. 后续 1. 现象 在Mac电脑上&#xff0c;使用Electron Updater对程序进行更新&#xff0c;但是一直不成功&#xff0c;也不报错。具体表现是这样的&#xff1a;当前我的程序版本是3.11版本&#xff0c;点击更新之后&#xff0c;也下载了&am…

微PE工具箱实现U盘重装Windows系统

教程来源 U盘重装Windows系统&#xff08;微PE工具箱&#xff09;_哔哩哔哩_bilibili 加上自己的一丢丢理解&#xff0c;如果你觉得长视频看了犯困&#xff0c;不如看看我的理解文章说不定能够帮助到你 准备工作 到这个网站使用迅雷下载免费无插件的官方镜像MSDN, 我告诉你…

JVM笔记 —— 出现内存溢出错误时时如何排查

一、出现内存溢出的几种情况 内存溢出错误分为StackOverflowError和OutOfMemoryError&#xff0c;前者是栈中出现溢出&#xff0c;后者一般是堆或方法区出现溢出&#xff0c;简称OOM 1. 栈溢出 StackOverflowError 栈溢出一般都是因为没有正确的结束递归导致的&#xff0c;无…

python安装第三方包时报错:...\lib\site-packages\pip\_vendor\urllib3\response.py...

安装redis第三方包&#xff1a; pip install redis报错现象&#xff1a; 解决方法&#xff1a;使用以下命令可成功安装 pip install redis -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式 0、引言1 基于LightGBM的网络入侵检测研究2 基于互信息法的智能化运维系统入侵检测Spark实现3 基于Spark的车联网分布式组合深度学习入侵检测方法4 基于Flink的分布式在线集成学习框架研究5 基于Flink的分布式并行逻辑回…