【面试高频】cookie、session、token?看完再也不担心被问了

news2025/1/18 10:47:54

在以往的面试记录里,我又看到了一个多次被问到的知识点,那就是 cookie、session、token 的区别有哪些?如果现在来问你,不知道你能否说清楚呢?

今天不仅仅是整理出这三者的区别,更重要的是能够真正去理解这三者之间的作用和联系。

cookie、session、token三者联系

在互联网里,一样事物的诞生往往是为了解决某种问题,这句话同样适用于此。

其实说到底,cookie、session、token 都围绕了一个点:身份认证

为什么要认证

很简单,比如电商购物网站需要登录。在输入账号密码点击登录之后,对服务器就产生了一次会话 session,就像你我之间进行了一次交谈,我根据你的名字样貌记住了你。那么服务器也需要能够记住你,需要把大家区分开来。

但是,由于http协议是无状态的,已经登录过的用户没法通过协议层把状态保存下来,所以下次再请求的时候,服务器还是不知道你是谁。

有什么办法呢?

Session

当服务器收到登录请求之后,生成一个 session id 一起返回给客户端,客户端下次再请求的时候把 session id 一起带上。这时候每个客户端请求对应各自的 session id ,服务就知道怎么区分了。

Cookie

而客户端与服务器之间的会话,一般会使用 Cookie 来管理。

服务在向客户端返回响应时,会在首部字段Set-Cookie内写入 Session ID(如 PHPSESSID=028a8c…)。

客户端接收到从服务器端发来的 Session ID 后,会将其作为 Cookie 保存在本地。

比如我登录了一个论坛,浏览器 F12 就可以看到保存在本地的 cookie。

产生的问题

由于服务器也要保存这 session信息用于跟客户端传过来的进行比对,数量小了还好,请数量大了,服务器要保存的内容页就越多,会吃不消。

此外,还会影响服务器的拓展能力。比如服务由2台机器组成一个集群,而我之前登录后,session id保存在服务器A上,但是下次请求如果发送到服务器B就不行了,因为人家没存,所以不认。

还会有如下等问题:

  • 对于非浏览器的客户端、手机移动端等不适用,因为session依赖于cookie,而移动端经常没有cookie
  • 因为session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效
  • 前后端分离系统中更加不适用,后端部署复杂,前端发送的请求往往经过多个中间件到达后端,cookie中关于session的信息会转发多次
  • 由于基于Cookie,而cookie无法跨域,所以session的认证也无法跨域,对单点登录不适用

服务器:唉!该死的 sessionid,要是可以不用该多好呀 o(╥﹏╥)o。

Token

嗯?其实这个事情核心在于身份认证,想个办法既能解决认证,又不用服务器保存不就好了:

  1. 客户端使用用户名和密码请求登录
  2. 服务端收到请求,验证用户名和密码
  3. 验证成功后,服务端会签发一个 token 令牌,再把这个token返回给客户端
  4. 客户端收到 token 后可以把它存储起来,比如放到cookie中
  5. 客户端每次向服务端请求资源时需要携带服务端签发的 token,可以在 cookie 或者 header 中携带
  6. 服务端收到请求,然后去验证客户端请求里面带着的 token,如果验证成功,就向客户端返回请求数据

重点就是在于服务端可以不用保存 token。

比如,当第一次收到客户端传过来的用户名和密码时,服务器认证通过后,通过加密算法生成一个字符串当做 token。当拿到后续请求中的 token,服务器再解析这个token,可以从中获取关键的信息,从而判断该token的有效性。

目前接触到的大多数系统,都是基于token验证来的,因为它的优点更适合当下的系统应用环境:

  • 无状态,可以更方便扩展
  • 更安全,可以防止跨站请求伪造 CSRF
  • 方便多平台跨域
  • 可以标准化,比如基于JWT Json web token (JWT)

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

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

相关文章

Python | print写入日志

Python | print写入日志 有时我们需要将屏幕上打印的消息保存到一个文件中,如果每条信息都通过调用写入函数来实现,就太麻烦了 这里自己定义1个日志类,然后将 sys.stdout 设置为该类即可,非常方便 sys.stdout Logger(fileName …

卡尔曼滤波与组合导航原理(八)遗忘滤波

函数模型 { X k Φ k l k − 1 X k − 1 Γ k − 1 W k − 1 Z k H k X k V k \left\{\begin{array}{l} \boldsymbol{X}_{k}\boldsymbol{\Phi}_{k l k-1} \boldsymbol{X}_{k-1}\boldsymbol{\Gamma}_{k-1} \boldsymbol{W}_{k-1} \\ \boldsymbol{Z}_{k}\boldsymbol{H}_{k} \…

C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n

题目: 从键盘输入数字n,在一个 有序数组 中查找具体的某个数字n。 思路一:普通方法 (逻辑简单,在无序数组中也可以使用,但效率较低,需要逐个查找) 总体思路: &#xff…

日常培训管理-参训名单/BootstrapTable获取表数据 / js 删除两个数组中id相同的对象/

---2022.11.9 1、 现在有一个功能是从下面待选名单中选中,再点击这个添加按钮,就会将这些人添加到上面这个参训名单,然后再给其中每个人手动打分。分打完 BootstrapTable中有两组数据,在下面待选名单数据条目前面中打钩选中&am…

从零开始学习CTF——CTF基本概念

这一系列把自己学习的CTF的过程详细写出来,方便大家学习时可以参考。 一、CTF简介 01」简介 中文一般译作夺旗赛(对大部分新手也可以叫签到赛),在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。 CTF…

odoo-028 odoo前端页面显示跟后台数据库内容不一致

文章目录 一、问题二、排查三、总结 版本:odoo13 一、问题 同步多端数据的时候发现,产品product.template页面显示的内容跟用接口查询出来的不一样,接口查询的结果中name值总是后面多一些数据。 页面显示:六甲基二硅胺锂 1.0M T…

开源且免费:全面评估排名前五的缺陷管理工具

软件缺陷管理是一个关于发现,记录,追踪,处理和报告软件缺陷的过程。这是软件开发过程中的一个重要环节,它可以帮助开发团队保持代码的质量并及时修复问题。 一、早期小团队使用的免费缺陷管理工具 在项目早期或者团队规模较小的…

kafka事务(伪事务)

事务要点知识 Kafka的事务控制原理 主要原理: 开始事务-->发送一个ControlBatch消息(事务开始) 提交事务-->发送一个ControlBatch消息(事务提交) 放弃事务-->发送一个ControlBatch消息(事务终…

瓦坎达的科技真的很厉害吗

就漫威电影宇宙来说,瓦坎达的科技真的很厉害吗 厉不厉害我不敢保证,但是这个IP段的服务器是真的好用 43.241.19.1 43.241.19.2 43.241.19.3 43.241.19.4 43.241.19.5 43.241.19.6 43.241.19.7 43.241.19.8 43.241.19.9 43.241.19.10 43.241.19.11 43.2…

使用ETLCloud强大的自定义规则实现自定义数据处理算法

实时数据处理规则有什么作用? 在大数据中的实时数据采集、ETL批量数据传输过程中很多数据处理过程以及数据质量都希望实时进行处理和检测并把不符合要求的脏数据过滤掉或者进行实时的数据质量告警等。 在数据仓库建设过程中,每家企业的数据处理过程中肯…

Java调用Groovy动态加载接口实现类,热部署不需要编译

pom <dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy-all</artifactId><version>2.4.3</version></dependency> Java接口&#xff1a; public interface Run {public void speed(int s); } Groovy实…

基于SSM的图书馆借阅管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会的发展和信息…

十二、Docker日志管理

Docker日志管理 Docker的日志大致有两种&#xff0c;一是Docker 引擎日志&#xff0c;也就是 dockerd服务自身运行时的日志&#xff1b;二是容器内的服务产生的日志。后一种有一定使用经验的童鞋应该发现有时候我们能通过docker logs查看容器日志&#xff0c;有时候又不能&…

就这水平也去大厂面试?你是怎么敢的啊

面试一直都是一个热门话题&#xff0c;软件测试员当然也逃不过~纵使你是一个技能全部满点的超优秀软件测试员&#xff0c;卡在面试这一关也是万万不可的。特别是大厂的测试员&#xff0c;他们面试所问的东西&#xff0c;你在学校通常接触不道&#xff0c;所以没有哪个应届生是一…

国内元宇宙游戏陆续开放,将带来科技娱乐新鲜感

自元宇宙概念兴起至今&#xff0c;国内多家互联网厂商纷纷参与其中&#xff0c;除了在区块链、人工智能、图像处理、云计算等专业技术领域深入布局&#xff0c;也通过大范围投资或收购的方式来扩大自身的元宇宙游戏版图。围绕这一新兴概念&#xff0c;一场产、学、研的实践正在…

高效科研工具(三):高效检索阅读paper-arXiv网站(arXiv使用大全、掌握研究热点、前沿动态)

高效科研工具&#xff08;三&#xff09;&#xff1a;高效检索阅读paper-arXiv网站&#xff08;arXiv使用大全、掌握研究热点、前沿动态&#xff09; 目录 0、前言&#x1f60f; 1、arXiv网站介绍&#x1f9d0; 2、arXiv网站使用&#x1f60e;&#x1f60e; 3、arXiv网站使用…

语义分割结果可视化(原图+语义掩码+图例)

语义分割结果可视化&#xff08;原图语义掩码图例&#xff09; 由于实习工作需要把语义分割结果可视化出来&#xff0c;要使用自定义颜色来区分不同的label&#xff0c;并绘制出图例并插入在图像右端。本文将介绍如何实现这样的语义分割结果图。 文章目录 语义分割结果可视化&a…

Mysql执行计划怎么看

执行计划就是sql的执行查询的顺序&#xff0c;以及如何使用索引查询&#xff0c;返回的结果集的行数 EXPLAIN SELECT * from A where X? and Y? 1.id :是一个有顺序的编号&#xff0c;是查询的顺序号&#xff0c;有几个 select 就显示几行。id的顺序是按 select 出现的顺序增…

13 【代理配置 插槽】

1.Vue脚手架配置代理 本案例需要下载axios库npm install axios 配置参考文档 Vue-Cli devServer.proxy vue.config.js 是一个可选的配置文件&#xff0c;如果项目的 (和 package.json 同级的) 根目录中存在这个文件&#xff0c;那么它会被 vue/cli-service自动加载。你也可以…

老人跌倒检测识别预警算法 yolov7

老人跌倒检测识别预警系统采用yolov7网络模型技术&#xff0c;老人跌倒检测识别预警算法对老人的行为进行实时监测。当老人发生跌倒时&#xff0c;系统将自动发出警报&#xff0c;及时通知现场护理人员进行处理。YOLOv7 的发展方向与当前主流的实时目标检测器不同&#xff0c;研…