cookie、session、token的区别

        这三者都和维持状态信息有关。比如我们如果在网页进行了一次登录,如果我们希望以后再访问该网页的时候,维持登录信息的话,就需要用到上面的这三种,如果不用的话,那么我们每次都需要携带登录信息到服务器,并且服务器需要将登录信息携带返回,后续请求的任何页面都需要这样,这样是很麻烦的。

        采用cookie的话,登录以后,服务器会返回给客户端一个cookie,cookie是保存在客户端的本地的,后续所有请求都会携带这个cookie进行访问,这样就维持了登录状态。

        但是,如果只用cookie来存储用户信息等内容的话,他会有很多的问题,

        cookie特点:

                优点:1.存储在客户端。2.帮助在客户端和服务器之间维护状态信息。

                缺点:1.安全风险:有被串改风险。2.容量限制4KB。3.可用限制:用户可能禁用。4.只能存储字符串对象。

        采用session的话,客户端发起登录请求,请求信息中会包括用户登录所需要的信息,服务器端拿到以后,会将其登录信息存入到服务器中,响应的时候会存入一个叫set-cookie的属性,再把当前session的唯一id放到属性当中,前端会自动在cookie当中存入当前的session的id,在下次请求的时候,就会携带这次的cookie,到服务器端,服务器端通过响应的sessionid找到存入的信息,进而完成登录的验证。session能够存入对象信息,不仅限于字符串类型。

        session特点:

                优点:1.安全性高:存储在服务器端。2.容量大:可以保存对象。

                缺点:1.占用服务器资源。2.扩展性差(分布式集群)。3.依然需要依赖cookie跨域限制。

        当服务器集群部署的时候,某一次session的信息只会存入一个服务器端,其他服务器不会存储相同的信息,当发生负载均衡的时候,选择了另外一个服务器,那么,就无法通过sessionid来获取响应的信息了。

        token就是一个秘钥字符串,jwt(json web token)提供了一种加密规范,也就是一种通过json来进行传递的加密后的字符串。

        jwt加密方法,加密后的加密字符串分为3部分:

        第一部分,就是header,下图中红色的字符串,来指定当前使用的算法和token类型:

        第二部分就是payload,下图中紫色的字符串,也就是来存放数据的地方:

        第三部分,是signature,是安全所在了,我们叫他秘钥。

        他会将base64编码之后的header和base64编码之后的payload相加,再加上只有自己知道的私钥,最后通过header中指定的算法来进行加密,最后就得到了下图蓝色的字符串了:

        引入token后,前后端以及集群的处理流程:

        token是一直在传输的一种字符串,并不依赖客户端或者服务器端的存储,只是一个传输过程中的一个字符串。能够解决跨域问题,更适合与前后端分离的项目和集群分布的项目。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

海纳斯删除广告位

找到文件 vim /var/www/html/home.php 删除代码段 <div class"adleft" id"adleftContainer"><button onclick"closeAd()">关闭</button><a href"https://www.ecoo.top/ad.html" target"_blank">&l…

Android Studio学习16——Activity跳转时的参数传递

传递数据——example 传递对象类型的数据——example 传递 接收 回传数据——example

Docker容器(五)Docker Compose

一、概述 1.1介绍 Docker Compose是Docker官方的开源项目&#xff0c;负责实现对Docker容器集群的快速编排。Compose 是 Docker 公司推出的一个工具软件&#xff0c;可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml&#xff0c;…

风险评估在应对网络安全威胁中扮演着重要的角色

如今&#xff0c;IT 安全专家面临各种重大威胁&#xff0c;从勒索软件、网络钓鱼&#xff0c;到对基础设施的攻击&#xff0c;再到对知识产权、客户数据的窃取&#xff1b;从不安全的供应链合作伙伴&#xff0c;再到组织内部人员的恶意行为。同时&#xff0c;随着云计算、远程工…

JavaScript(二)-Web APIS

文章目录 Web API 基本认知作用和分类什么是DOMDOM树DOM对象获取DOM对象操作元素内容操作元素属性操作元素常用属性操作元素样式属性自定义属性 定时器-间歇函数定时器函数的理解定时器函数使用间歇函数 事件监听与绑定事件监听事件监听版本事件类型事件对象什么是事件对象获取…

micropython控制esp32上的LED闪烁

ESP32电路图 部分PCB原理图: https://doc.itprojects.cn/0006.zhishi.esp32/01.download/esp32_Schematic%20Prints.pdf GPIO2输出高低电平&#xff0c;控制LED。下面是控制LED灯闪烁的代码。 import machine import time pin2 machine.Pin(2, machine.Pin.OUT) while True:…

Java集合基础知识点复习

目录 Java提供的常见集合ListArrayList底层实现与扩容机制ArrayList listnew ArrayList(10)中的list扩容几次如何实现数组和List之间的转换用Arrays.asList转List后&#xff0c;如果修改了数组内容&#xff0c;list受影响吗&#xff1f;List用toArray转数组后&#xff0c;如果修…

一键无痕清理:高效删除Mac文件夹,释放宝贵存储空间

在当今重视隐私的时代&#xff0c;当转让或出借Mac电脑时&#xff0c;确保个人文件和敏感信息彻底清除至关重要。常规删除Mac上的文件和文件夹仅使数据看似消失&#xff0c;实际上它们仍驻留在硬盘上&#xff0c;存在被数据恢复软件找回的风险。为实现不可逆的删除效果&#xf…

Python+Vuecil笔记

Nginx 进入目录: C:\nginx-1.20.2\nginx-1.20.2 start nginx 开始 nginx -s stop 停止 nginx -s quit 退出CSS 通过标签去写css 循环展示数据 JS 点击时执行事件 Django 配置media 在seetings里面修改 STATIC_URL /static/ MEDIA_URL /upload/ MEDIA_ROOT os.pat…

文心一言指令词宝典之咨询分析篇

作者&#xff1a;哈哥撩编程&#xff08;视频号、抖音、公众号同名&#xff09; 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5;…

探索7个MAMP本地开发环境的高效替代软件

什么是本地开发环境 本地开发环境是Web开发环境中的一种类型&#xff0c;它是指开发者自己的计算机上配置的一套用于开发和测试网站或应用程序的软件集合。这套环境使得开发者可以在本地计算机上构建和测试网站&#xff0c;而无需实时部署到服务器。 创建本地开发环境有两种方…

剪映国际版 v3.7 来了,全功能纯净,附400套离线模板下载

剪映国际版 v3.7 来了&#xff0c;全功能纯净&#xff0c;附400套离线模板下载 相比国内版 国际版不仅没有广告&#xff0c;所有素材和功能都是免费使用的。 CapCut是剪映的国际版本,操作和各种功能几乎和剪映一模一样&#xff0c; 是一款免费无限制使用的视频剪辑软件,软件…

Struts2:Action类的写法,推荐使用继承ActionSupport类的方法

文章目录 方法一&#xff1a;Action类是一个POJO类&#xff08;简单的Java类&#xff09;ActionDemo2.javastruts_demo2.xmlstruts.xml运行结果其他strutsz_demo1.xml 方法二&#xff1a;实现一个Action的接口ActionDemo2_2.javastruts_demo2.xml运行结果 推荐&#xff01;&…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

干货两个常用的 Python 模块

干货|两个常用的 Python 模块 在日常开发工作中&#xff0c;经常会遇到这样的一个问题&#xff1a;要对数据中的某个字段进行匹配&#xff0c;但这个字段有可能会有微小的差异。比如同样是招聘岗位的数据&#xff0c;里面省份一栏有的写“广西”&#xff0c;有的写“广西壮族自…

产品软文推广方案怎么做,媒介盒子告诉你

软文营销现在已经成为许多企业进行宣传的手段&#xff0c;尤其是当新品发布的时候&#xff0c;更需要做好产品软文推广方案&#xff0c;让新产品的推广更加顺利&#xff0c;那么产品软文推广方案怎么开始&#xff1f;又该怎么做好呢&#xff1f;接下来就让媒介盒子告诉你。 一、…

springboot之RESTful接口与Swagger

一、RESTful GET获取资源、POST新建资源、PUT更新资源、DELETE删除资源。 RESTful两大特性 1、安全性&#xff1a;GET请求不会引起资源本身改变。 2、幂等性&#xff1a;对一个接口请求和多次请求返回的资源应该一致。 2xx&#xff1a;成功 4xx&#xff1a;客户端错误。 …

东方博宜 1397. 完美的偶数?

东方博宜 1397. 完美的偶数&#xff1f; 解题思路&#xff1a; 1 读取n个数存到数组里面 2 遍历数组中的每个数&#xff1a;判断每个数是否为偶数位&#xff1b;判断每个数的每个数位是否为偶数。 细节&#xff1a;for循环里面定义的变量只能在for循环内使用。 在遍历数组中的数…

就业班 第二阶段(python) 2401--4.7 day3 python3 函数

八、文件操作 1、读取键盘输入 input 获取标准输入&#xff0c;数据类型统一为字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- str input("请输入&#xff1a;") print&#xff08;"你输入的内容是: ", str&#xff09; 这会产生如下的对应着输入的…

使用阿里云服务器可以做什么?太多了

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…