秋招突击——8/21——知识补充——计算机网络——cookie、session和token

news2024/11/24 8:41:49

文章目录

    • 引言
    • 正文
      • Cookie——客户端存储和管理
      • Session——服务端存储和管理
      • Token
      • 补充
        • 签名和加密的区别
        • 常见的加密算法和签名算法
    • 面试题
      • 1、HTTP用户后续的操作,服务端如何知道属于同一个用户?如果服务端是一个集群机器怎么办?
      • 2、如果禁用了Cookie,怎么实现Session
      • 3、Cookie、Session和Token有什么区别?
      • 4、JWT原理和校验机制
      • 5、JWT令牌为什么能够就解决集群部署问题
      • 6、JWT的缺点
      • 7、什么是跨域?什么情况下会发生跨域请求?
    • 总结

引言

  • 马上要面试了,总是觉得会被问到对应的cookie、session和token等解决HTTP无状态的一些协议,这里就整理一下。
  • 除此之外,心里比较紧张,因为估计是最后一轮技术面,过了这个我秋招算是结束了一半了吧!
  • 先别扯这些,继续看吧,不能浪费时间,面试完了,晚上好好整理一下,然后在刷两道题目。
  • 参考信息
    • 图解|cookie、session、token的那些事儿
    • 19 让我知道你是谁:HTTP的Cookie机制
    • 凤凰架构——凭证

正文

  • HTTP本身是无状态,但是很多应用都是基于状态记录实现的,电子商城要记录用户购买商品数量、视频网站需要记录用户的登录状态和保存用户的浏览记录。
  • 主要是通过cookie、session和token解决

在这里插入图片描述

Cookie——客户端存储和管理

1、基本介绍

  • 提示作用的小纸条
    • 是服务器发送到客户端浏览器,并保存在本地的一小块数据,会在浏览器下次向同一服务器再次发送请求时,被携带并发送到服务器上。
  • 具体作用
    • 身份识别,管理会话事物:告知服务端两个请求是否来自同一个浏览器
    • 对网页的个性化设置:用户自定义设置、主题等
    • 广告跟踪:第三方收集你访问目标网站的cookie,然后针对性的对你投放广告

2、Cookie的创建交互过程

  • 服务端Set-Cookie标记
    • 服务端受到客户端的HTTP请求后,在返回的响应中,会添加set-cookie字段
      • 其中包含了创建的独特的身份标识数据“key=value
  • 客户端保存cookie
    • 客户端收到请求之后,会保存下Cookie
    • 后续每一次请求,都附加Cookie信息发送给服务器
    • 如果更换了浏览器就没有办法再次成功创建链接

3、具体交互过程见下图
在这里插入图片描述
4、存在的问题

  • 明文传输
    • 容易被劫持攻击
    • 跨站伪造请求:利用你的cookie向银行发起转账请求
  • 网络负载高
    • 每次发送信息都会有额外的流量消耗
  • 数量和容量限制
    • cookie有容量和数量的限制,无法发送复杂消息
  • 潜在的网络攻击

5、Cookie中包含的信息字段

  • Expires
    • 过期截至时间
  • Max-Age
    • 最大生存时间,接受时间+最大生存时间 就是过期时间
  • 作用域
    • Domain:当前cookie发送给特定的网站域名
    • Path:访问路径

Session——服务端存储和管理

1、简介

  • Session表示服务器和浏览器的一次会话过程
  • 完全由服务端掌握

2、通信流程

  • 1、保存通信信息并生成Session ID

    • Session机制将用户的所有活动信息、上下文信息、登录信息等存储在服务端
    • 根据会话信息生成一个唯一标识的ID发送给客户端
  • 2、客户端保存SessionID标签并放置在请求头上

    • 客户端保存,并在后续的通信中,将Session ID放在请求头
  • 3、客户端验证SessionID读取通信细节

3、主要实现方式

  • Cookie

    • 首选,默认开通并使用的方式
  • URL重写

    • 会话标识号以参数的形式附加在超链接的URL地址后面

在这里插入图片描述

4、存在问题

  • 海量用户时,巨大的存储压力

    • Session存储在服务端,用户量很大的场景,占用空间会很多
  • 分布式系统中的信息共享问题

    • 分布式系统中使用不同的机器存储Session,会有共享问题,无法保证访问的Session在当前机器中存在
      • 信息复制和重建浪费资源
      • 定制化哈希,将session映射到不同的机器上
      • 使用session代理实现信息共享。

Token

1、简介

  • 服务端根据客户端发送过来的信息生成的令牌,发送给客户端
  • 具有时效性的一种验证身份的手段

2、交互流程

  • token生成过程
    • 准备载荷PayLoad
      • 以Json的格式保存用户非敏感信息,但是能够表示用户 状态的信息
    • 编码载荷PayLoad
      • 将json转成字符串 ,并使用Base64编码
    • 准备头部header
      • Token类型和哈希算法
    • 组合头部和载荷
      • 使用.连接起头部和载荷
    • 生成签名
      • 头部 + 载荷特定哈希算法生成哈希值私钥进行签名
      • 将签名的结果进行Base64编码
    • 组装和发送Token
      • 头部(base64编码).载荷(base64编码).签名(base64编码) 进行连接,形成token串,然后进行发送。

在这里插入图片描述

  • token验证过程
    • 提取Token
      • 提取token中的header字段和PayLoad字段
    • 生成临时signature
      • 使用服务端保存的密钥,base64编码下的header和payload进行加密,生成临时签名
    • 比较签名是否修改
      • 比较临时signature和原来的signature是否相同的
        • 相同,说明没有修改过,验证是否过期,没有过期就处理请求
        • 不同,说明已经修改过了,不合法,返回失败信息401(未授权状态码)

在这里插入图片描述

补充

签名和加密的区别

1、目的不同

  • 加密
    • 保护数据的机密性,防止未经授权的人访问和读取数据
    • 只有授权用户才能解密的格式
      • 对于对称加密而言,就是同时持有密码的两方才能解密
      • 对于非对称加密而言,就是公钥进行加密,然后私钥进行界面,持有私钥的才能获取信息
  • 签名
    • 验证数据的完整性和来源的真实性——发送者有很多,只有持有私钥发送的才是合法的
    • 签名
      • 持有私钥方,对数据进行加密。(其他人持有公钥可以解密,但是没有私钥,没有办法加密,所以无法修改)
      • 接收方使用发送方的公钥的来验证签名的有效性,确认数据在传输过程中是否被更改过。

2、使用方式不同

  • 加密

    • 非对称加密
      • 公钥进行加密,私钥持有者进行解密,是单向发送的
    • 对称加密
      • 通信双方使用相同密钥,双向通信
  • 签名

    • 私钥
      • 对数据进行签名,生成签名文件
      • 签名者持有的,Token中就是的服务端就是签名持有者
    • 公钥
      • 对签名进行验证,对私钥进行解密,验证数据是否完整
      • 公开给所有需要验证签名的人
常见的加密算法和签名算法

签名算法

  • RSA
  • DSA
  • ECDSA

加密算法

  • 对称加密算法
    • AES、ADS、IDEA
  • 非对称加密算法
    • RSARCDHE

面试题

1、HTTP用户后续的操作,服务端如何知道属于同一个用户?如果服务端是一个集群机器怎么办?

Session Cookie机制

  • 通过session cookie机制实现用户登录状态的管理
    • 服务端验证客户端的用户信息后,通过验证会对当前的会话生成唯一的session id,分别保存在服务器端以及通过cookie 发送给客户端,并设定set-cookie字段
    • 后续客户端在访问网站时,将带有session id的cookie发送给服务端,服务端通过匹配数据库来获取之前的用户信息,避免重复登陆

集群请求

  • ** redis保存所有Session ID**
    • 使用redis作为缓存保存所有的Session ID,然后由redis进行session id的检索和判定
    • 单点故障,多机部署成本高
  • 使用JWT
    • JWT的状态信息是保存在客户端的,不过会附加上对应的signature,防止token被修改

2、如果禁用了Cookie,怎么实现Session

  • 一般是通过cookie传输session id的
  • 可以通过重写URL来实现,在URL中增加一个字段sessionid=

3、Cookie、Session和Token有什么区别?

存储位置

  • Cookie是存储在客户端,通过HTTP头传递给服务器来通信
  • Session是存储在服务端,服务器的内存或者数据库
  • Token存储在客户端,但是以加密的方式存储在客户端LocalStorage和SessionStorage

安全性

  • cookie存储在客户端,存在窃取和篡改的风险
  • Session存储在服务端,通过session-id在客户端和服务器之间进行关联,避免敏感数据直接暴漏
  • Token加密算法生成,有效期短,并且单向不可逆

跨域支持不同

  • Cookie不支持跨域传输,不同域名下cookie不能混用
  • Session不支持跨域传输,Session一般是通过cookie来传输SessionID
  • Token是保存在客户端的localStorage,并且作为请求头的一部分发送给服务器,不同域名的Token可以共享,只要的密钥共享就行了

状态管理不同

  • cookie是应用程序通过在客户端临时存储数据,实现状态管理的一种机制
  • session是服务器记录状态的方式,为每一个会话分配一个session ID,并将其和用户状态相关联
  • token是用于认证和授权的机制,表示用户的身份信息和权限信息

4、JWT原理和校验机制

  • 如下图
    • 生成token

      • 服务器校验用户的账号和密码,然后生成token,主要有三部分构成,分别是header和payload
      • header指明了当前token的类型,默认一般是jwt,然后签名算法是加密这个token的常见的加密算法
      • payload是负载,包含了用户的标识符,用户的权限信息,
      • 然后对payload和header分别进行base64编码,并使用.链接
      • 接着使用指定的签名算法,使用保存在服务端的私钥对前两者的链接进行加密,生成signature,然后再用base64编码
      • 最后将上述三者使用.链接,然后在发送给客户端
    • 校验token

      • 获取token中的header和payload,然后使用保存的密钥对其进行加密,生成临时token
      • 然后再和signature进行比较
        在这里插入图片描述

5、JWT令牌为什么能够就解决集群部署问题

  • JWT中包含了用户的身份、状态等信息,这些信息是保存在客户端的,然后服务端只需要保存的对应的私钥就行了!

6、JWT的缺点

1、难以主动失效

  • 一旦签发,所有的逻辑都和服务器无关,除非另外自动到期失效。
    • 黑名单:将需要额外判断失效的令牌存起来,如果在这里面就默认是无效的
      2、防盗用
  • 令牌里面含有用户的身份认证信息,一旦泄露很危险,所以一般设置的过期时间都比较短

7、什么是跨域?什么情况下会发生跨域请求?

同资源的定义

  • 协议、端口、域名相同
  • 限制一个网页中的脚本只能访问同源下的资源,不能访问其他域下的资源

跨域限制

  • 跨域请求在浏览器上是不被允许的,只要在浏览器上发生了跨域请求,就会报错,No Access-Control-Allow-Origin

绕过跨域限制的方式

  • 使用反向代理
    • 通过Nginx等工具设置反向代理,将请求发送到目标服务器
  • CORS跨域共享技术

总结

  • 目前是将cookie、Session还有token都画图画了一遍,理解更加深刻了,基本上很多东西都是可以根据这个图片内容推导出来的!
  • 加油!继续准备面试!

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

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

相关文章

BaseCTF [第 1 周] ez_maze

笔记。 64ida打开。 更加确定。 所以常规做这类型题 思路(简单的话): 先提取字符 计算其长度 对半分。 BaseCTF{131b7d6e60e8a34cb01801ae8de07efe}

基于YOLOv8的无人机高空红外(HIT-UAV)检测算法,魔改SimAM注意力助力涨点(一)

💡💡💡本文内容:针对基于YOLOv8的无人机高空红外(HIT-UAV)检测算法进行性能提升,加入各个创新点做验证性试验。 1)魔改SimAM注意力,引入切片操作:mAP从原始的…

算法日记day 46(单调栈之下一个更大元素|柱状图中最大图形)

一、下一个更大元素1 题目: nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。 对于每个 0 …

【Oracle问题】ORA-12516:监听程序找不到符合协议堆栈要求的可用处理程序问题处理

ORA-12516:监听程序找不到符合协议堆栈要求的可用处理程序 这种一般都是会话数或者process和session已经到达临界值或者超过最大值了。 1.先cmd登录sqlplus: sqlplus / as sysdba;2.查看设置的最大的连接数和进程数: show parameter process&#xff…

三维平面电磁铁、交流电磁铁、显微镜磁场北京大学方案

根据用户北京大学需求设计制造方案如下 三维平面电磁铁产品规格 5MPS63-25型三维平面电磁铁,X、Y方向磁场由2对正交的磁极产生,Z轴由一组同轴线圈产生; 每轴对应的两个线圈正接产生均匀磁场,反接产生梯度磁场; …

JetBrains GoLand 2024.2 (macOS, Linux, Windows) - 为 Go 开发者打造的完整 IDE

JetBrains GoLand 2024.2 (macOS, Linux, Windows) - 为 Go 开发者打造的完整 IDE JetBrains 跨平台开发者工具 请访问原文链接:https://sysin.org/blog/jetbrains-goland/,查看最新版。原创作品,转载请保留出处。 作者主页:sy…

一文解决---IDEA汉化问题(含中英文切换)

一、英文->中文: ①.下载汉化包插件: 操作顺序:File->Settings->Plugins 在搜索框输入Chinese,然后找到 Chinese (Simplified) Language (汉化插件),等待下载完→Install (安装)&…

《机器学习》—— 通过下采样方法实现逻辑回归分类问题

文章目录 一、什么是下采样方法?二、通过下采样方法实现逻辑回归分类问题三、下采样的优缺点 一、什么是下采样方法? 机器学习中的下采样(Undersampling)方法是一种处理不平衡数据集的有效手段,特别是在数据集中某些类…

VTK随笔三:坐标系统、空间变换、VTK管线、VTK智能指针

一、坐标系统 Model坐标系统:定义模型时所采用的坐标系统,通常是局部的笛卡尔坐标系。World坐标系统:是放置Actor的三维空间坐标系,Actor(vtkActor类)其中的一个功能就是负责将模型从Model坐标系统变换到World坐标系统。每一个模…

python动画:实现贝塞尔曲线【bezier】

贝塞尔曲线在计算机图形学中用于绘制形状、用于 CSS 动画和许多其他地方。它们是一件非常简单的事情,值得学习一次,然后在矢量图形和高级动画的世界中感到舒适。 一.控制点 贝塞尔曲线由控制点可能有 2、3、4 或更多。 例如,二次贝塞尔曲线…

基于java教师课堂教学质量评价系统设计与实现

课题背景 高等学校的根本任务是培养人才,课堂教学是高校完成人才培养的重要环节,因此, 教师教学质量的高低对学生掌握和运用知识的程度有着密不可分的作用,为了保证教师的教学质量,教学评价成为了各高校衡量教师教学质…

大数据-92 Spark 集群 SparkRDD 原理 Standalone详解 ShuffleV1V2详解 RDD编程优化

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

盘古信息IMS MCM制造协同管理系统:为中小企业数字化转型量身打造的数字化方案

近年来,全球经济的不稳定性,给中小企业的经营和发展带来了巨大的挑战。为提升企业竞争力,中小企业纷纷谋求数字化转型路径,优化生产流程、提高运营效率、降低生产成本,以应对变幻莫测的市场环境。IMS MCM是盘古信息为广…

go中 panicrecoverdefer机制

go的defer机制-CSDN博客 常见panic场景 数组或切片越界,例如 s : make([]int, 3); fmt.Println(s[5]) 会引发 panic: runtime error: index out of range空指针调用,例如 var p *Person; fmt.Println(p.Name) 会引发 panic: runtime error: invalid m…

IT 人员配置的演变趋势:2024 年上半年的见解

随着我们深入研究 2024 年的动态格局,IT 人员配置领域在前六个月见证了几个值得注意的趋势和变化。 这些发展不仅反映了企业不断变化的需求,也凸显了技术对劳动力动态的变革性影响。 以下是在这个关键年份上半年塑造 IT 人员配置的一些关键趋势的详细介…

Python办公自动化smtplib实现自动发送邮件

学好python自动化,走遍天下都不怕!! 今天主要学习如何利用python自动化分析处理数据并以附件形式发送邮箱。需要安装配置python的运行环境,以及电脑支持Excel文件,有可以正常使用的邮箱。还需要用到python的第三方模块…

剧本杀门店预约小程序,提高消费者体验

当下,剧本杀行业一直处于活跃的状态,不管是线下聚会还是休闲娱乐,剧本杀游戏都是消费者的选择,剧本杀市场具有非常大的发展前景。 剧本杀门店预约系统是一个高效、便捷的游戏预约方式,能够帮助消费者便捷预约&#xf…

基于ssm的爱心捐赠管理系统的设计与实现(论文+源码)_kaic

摘 要 在互联网高速发展的现在,许多的办公与应用从传统的实体办理变为了在线处理。网购与网淘商品的浏览也从大街小巷变为了在线预览,从而使网上用户更好地对物品产生客观、全面立体的认知,并且对物品的对比也更加的省时省力。 爱心捐赠管…

一个简单的springboot项目(有源码)

开发一个springboot项目 代码迭代整合工具 gitee建模意义程序处理方式开发功能的步骤web服务网络状态码 web应用的开发分层springboot的作用 springboot框架搭建框架中各组件作用框架的演变如何提取hive中的表结构创建springboot 工程的引导模版 要选择aliyun ,否则…

java ssl使用自定义证书或忽略证书

1.证书错误 Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 2.生成客户端证书 openssl x509 -in <(openssl s_client -connect 192.168.11.19:8101 -prexit 2>/dev/null) -ou…