【接口】HTTP(4)|Session、Cookie、token有什么区别?

HTTP是一种无状态的协议,服务器本身没有记忆功能,无法记住客户端之前是否有发送过请求,因此客户端每次发送的请求都是独立的

无状态:HTTP是一个无状态的协议。这句话里的无状态是什么意思? - 知乎

1、为什么需要cookie?

首先http是一种无状态的协议,需要让业务之间有关联,就需要cookie这门技术,让业务页面之间有数据传递。

cookie是一门客户端技术,一般由服务器生成返回给浏览器客户端来保存的,并且cookie是以键值对的形式保存在浏览器客户端的,每一个cookie都会有名称,值,过期时间...在项目中比较常见的有:1、登录记住用户名 2、记住用户浏览记录...

2、session生成方式?

浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid.

然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。

这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;

还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;

简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。

session是放到cookie里面,请求头里面携带

3、为什么会有token的出现? 

首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;

而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;

token不一定放到cookie里面,可以放到请求体/请求参数里面;有的项目不需要把token放到cookie中

4、token的生成方式?

浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;

客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;

5、token和session的区别?

token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;

session服务器会保存一份,可能保存到缓存,文件,数据库;

同样,session和token都是有过期时间一说,都需要去管理过期时间;

其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。 而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

方案 A (session):我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。

方案 B(token) :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。

6、cookie和session token的联系:

  1、session可以通过Cookie实现,也可以不通过

  2、token也可以通过Cookie实现,也可以不通过

  3、Cookie+session一般都搭配做认证,Cookie是放在浏览器中的,session 是保存在服务端的数据库中的

  4、由于Cookie一般是和域名绑定的,一般很少和token搭配

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

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

相关文章

Rust通用代码生成器莲花,红莲尝鲜版二十二,发布数据库自动反射新功能及其视频

Rust通用代码生成器莲花,红莲尝鲜版二十二,发布数据库自动反射新功能及其视频 Rust 通用代码生成器莲花,红莲尝鲜版二十二,此版本新增了数据库自动反射功能,可以为遗留数据库配上操作软件。此版本增强了模板向导界面的…

LINUX 下IPTABLES配置详解

-t<表>&#xff1a;指定要操纵的表&#xff1b; -A&#xff1a;向规则链中添加条目&#xff1b; -D&#xff1a;从规则链中删除条目&#xff1b; -i&#xff1a;向规则链中插入条目&#xff1b; -R&#xff1a;替换规则链中的条目&#xff1b; -L&#xff1a;显示规则链中…

MQ中的交换机与队列

交换机与队列的介绍 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff…

最简单知识点PyTorch中的nn.Linear(1, 1)

一、nn.Linear(1, 1) nn.Linear(1, 1) 是 PyTorch 中的一个线性层&#xff08;全连接层&#xff09;的定义。 nn 是 PyTorch 的神经网络模块&#xff08;torch.nn&#xff09;的常用缩写。 nn.Linear(1, 1) 的含义如下&#xff1a; 第一个参数 1&#xff1a;输入特征的数量…

【人工智能】AI赋能城市交通 未来城市的驱动力

前言 随着城市化进程的不断加速&#xff0c;交通拥堵、环境污染等问题日益凸显&#xff0c;人们对交通系统的效率和可持续性提出了更高的要求。在这样的背景下&#xff0c;智能交通技术正成为改善城市交通的重要驱动力。本文将探讨智能交通技术在解决城市交通挑战方面的应用和未…

为什么要在 Golang 中使用指针

1、性能优化&#xff1a;指针允许你在不复制数据的情况下访问和修改变量。当你有一个大型的数据结构时&#xff0c;如果直接传递这个数据结构&#xff0c;会产生一个完整的副本&#xff0c;这会增加内存的使用和CPU的计算时间。使用指针&#xff0c;你可以只传递数据的地址&…

谷歌留痕霸屏要怎么做?

谷歌留痕霸屏&#xff0c;就是让你的网站或者页面在谷歌搜索结果里尽可能多地出现&#xff0c;就像是在你的潜在客户眼前留下深刻印象一样&#xff0c;你要做的就是在一些高权重平台发布有价值的信息&#xff0c;同时巧妙地留下你的品牌名、产品名或者任何你想要推广的关键词&a…

css实现各级标题自动编号

本文在博客同步发布&#xff0c;您也可以在这里看到最新的文章 Markdown编辑器大多不会提供分级标题的自动编号功能&#xff0c;但我们可以通过简单的css样式设置实现。 本文介绍了使用css实现各级标题自动编号的方法&#xff0c;本方法同样适用于typora编辑器和wordpress主题…

六角螺母缺陷分类数据集:3440张图像

六角螺母缺陷数据集&#xff1a;包含变形&#xff0c;划痕&#xff0c;断裂&#xff0c;生锈&#xff0c;以及优质螺母图片数据&#xff0c;共计3440张&#xff0c;无标注 一.变形螺母-1839 二.断裂螺母-287 三.划痕螺母-473 四.生锈螺母-529 五.优良螺母-312 适用于CV项目&am…

Flutter之Flex组件布局

目录 Flex属性值 轴向:direction:Axis.horizontal 主轴方向:mainAxisAlignment:MainAxisAlignment.center 交叉轴方向:crossAxisAlignment:CrossAxisAlignment 主轴尺寸:mainAxisSize 文字方向:textDirection:TextDirection 竖直方向排序:verticalDirection:VerticalDir…

灵猫论文好用吗 #媒体#笔记

灵猫论文是一款专门用于论文写作、查重降重的工具&#xff0c;它的使用方便、高效&#xff0c;深受广大论文作者的喜爱。那么&#xff0c;灵猫论文到底好用吗&#xff1f;答案是肯定的&#xff01; 首先&#xff0c;灵猫论文提供了强大的查重降重功能&#xff0c;能够帮助用户快…

MySQL8.0新特性详解及全局优化

文章目录 一、前言二、开窗函数三、新增函数索引四、group by不再隐式排序五、新增降序索引六、binlog日志文件过期时间精确到秒七、undo文件不再使用系统表空间八、默认字符集由latin1变为utf8mb4九、自增变量持久化十、删除了.frm等文件 一、前言 目前MySQL8.0及以上版本在我…

Commitizen:规范化你的 Git 提交信息

简介 在团队协作开发过程中&#xff0c;规范化的 Git 提交信息可以提高代码维护的效率&#xff0c;便于追踪和定位问题。Commitizen 是一个帮助我们规范化 Git 提交信息的工具&#xff0c;它提供了一种交互式的方式来生成符合约定格式的提交信息。 原理 Commitizen 的核心原…

Vue3跟Vue2比,性能真的有所提升吗?

答案是肯定的。 说起Vue3的改进&#xff0c;很多人都会说出响应式的改变&#xff0c;与Vue2相比&#xff0c;Vue3采用了proxy的方式对响应式做了重写&#xff0c;而Vue2则是采用defineProperty的方式将对象的属性进行深度遍历&#xff0c;而这种方式想要实现响应式的前与后&am…

Python random randint() 方法

Python random randint() 方法 Python random 模块 Python random 模块 Python random.randint() 方法返回指定范围内的整数。 randint(start, stop) 等价于 randrange(start, stop1)。 语法 random.randint() 方法语法如下&#xff1a; random.randint(start, stop) 参数…

C++:万能进制转换

目录 引言一、p进制转为十进制二、十进制转换为p进制三、测试 引言 本文介绍的这个 p p p 进制与十进制之间的转换&#xff0c;主要是针对算法竞赛中的&#xff0c;对于一些特殊情况&#xff0c;比如说字母大小写、前导零、非法输入的处理等这些问题其实都没有去深究&#xf…

每日学习笔记:C++ STL算法之容器元素复制与搬移

本文API 复制元素&#xff1a; copy() copy_if(....,op) copy_n() copy_backward() 搬移元素&#xff1a; move() move_backward() 复制元素 搬移元素

SQL注入利用学习-Union联合注入

联合注入的原理 在SQL语句中查询数据时&#xff0c;使用select 相关语句与where 条件子句筛选符合条件的记录。 select * from person where id 1; #在person表中&#xff0c;筛选出id1的记录如果该id1 中的1 是用户可以控制输入的部分时&#xff0c;就有可能存在SQL注入漏洞…

Python爬虫与API交互:如何爬取并解析JSON数据

目录 前言 一、什么是API和JSON数据 二、准备环境 三、发送API请求并获取数据 四、解析JSON数据 五、完整代码示例 六、总结 前言 随着互联网的发展&#xff0c;越来越多的网站提供了API接口&#xff0c;供开发者获取实时数据。在爬虫领域中&#xff0c;与API交互并解析…

SpringBoot通过token实现用户互踢功能

认识token 所谓token&#xff0c;既用户能够在一定时间内证明自己身份的一长串字符串。正常的使用流程为&#xff1a;用户第一次登入——》服务器为该用户签发一份token——》进行其他服务请求时携带上token——》服务器判断此token在有效期内——》放行此次请求。 在上述过程…