HTTP、Session、Token及Cookie详解

embedded/2024/9/20 1:27:04/ 标签: 前端

HTTP(超文本传输协议)

HTTP(Hypertext Transfer Protocol) 是用于在Web浏览器和Web服务器之间传输信息的协议。它是无状态的,这意味着每个请求都是独立的,服务器不会记住之前的请求状态。HTTP使用客户端-服务器模型,客户端发起请求,服务器返回响应。

  • 请求方法:常见的HTTP方法包括GET、POST、PUT、DELETE等。GET用于请求数据,POST用于提交数据,PUT用于更新数据,DELETE用于删除数据。

  • 状态码:HTTP状态码用于指示请求的结果。常见的状态码包括:

    • 200: OK,请求成功。

    • 404: Not Found,资源未找到。

    • 500: Internal Server Error,服务器内部错误。

  • 请求和响应结构:每个HTTP请求和响应包含头部信息(headers)和主体内容(body)。头部信息包含元数据,例如Content-Type、User-Agent等,而主体内容则包含实际的数据。

Session(会话)

Session(会话) 是一种在无状态的HTTP协议上保持用户状态的机制。通过Session,服务器可以在多个请求之间保存用户的数据,例如用户登录状态。

  • 工作原理:当用户第一次访问网站时,服务器会创建一个Session对象,并为该Session生成一个唯一的Session ID。这个ID通常通过HTTP cookie发送给客户端,客户端在后续请求中将Session ID发送回服务器。服务器根据这个Session ID识别用户,并关联该用户的状态信息。

  • 存储:Session数据通常存储在服务器端,可以保存在内存、文件、数据库等地方。由于Session数据存在服务器上,安全性相对较高,但它依赖服务器资源,如果大量用户同时在线,可能会导致服务器资源消耗过大。

Token(令牌)

Token(令牌) 是一种用于验证用户身份的方式。与Session不同,Token通常是无状态的,不需要在服务器端保存用户数据。Token广泛用于现代Web应用程序,特别是在API认证和无状态服务中。

  • JWT(JSON Web Token):JWT是目前非常流行的Token标准。它由三部分组成:头部(header)、载荷(payload)和签名(signature)。头部包含算法类型,载荷包含用户信息,签名则用来验证Token的完整性。

  • 工作原理

    1. 用户登录后,服务器生成一个Token并返回给客户端。

    2. 客户端将Token存储起来(通常在localStorage或sessionStorage中),在每次请求时将Token包含在请求头中发送给服务器。

    3. 服务器验证Token的有效性,如果Token有效,则允许访问资源。

  • 优点

    • 无状态:Token不需要服务器存储,因此可以在多台服务器之间共享。

    • 灵活性:Token可以携带更多的信息,且可以设置有效期。

  • 缺点

    • 安全性:如果Token被窃取,攻击者可以冒充用户。因此,Token通常设置为短期有效,并通过HTTPS传输。

Cookie

Cookie 是HTTP协议中用来在客户端和服务器之间传递少量数据的小型文本文件。它由服务器生成,并发送到客户端(通常是浏览器),然后客户端将Cookie存储并在后续请求中发送回服务器。Cookie最常用于在无状态的HTTP协议中维持状态信息,例如跟踪会话、存储用户偏好或实现持久登录。

Cookie 的结构和属性
  • 名称和值:每个Cookie都有一个唯一的名称(name)和对应的值(value)。例如,session_id=abc123,其中session_id是名称,abc123是值。

  • 域(Domain):指定Cookie适用的域名,通常是创建Cookie的服务器的域名。例如,.example.com允许所有子域名共享该Cookie。

  • 路径(Path):指定Cookie适用的URL路径。只有在请求URL路径与该路径匹配时,Cookie才会被发送。

  • 过期时间(Expires)和最大存活期(Max-Age):决定了Cookie的有效期。Expires指定一个绝对的过期时间(通常是一个日期和时间),而Max-Age指定一个相对的时间(以秒为单位)。如果没有设置这些属性,Cookie会在浏览器会话结束时删除(称为会话Cookie)。

  • 安全标志(Secure):指示Cookie只能通过HTTPS连接传输,防止在不安全的HTTP连接上传输Cookie。

  • HttpOnly:标志表示Cookie不能通过JavaScript(例如通过document.cookie)访问,减少XSS(跨站脚本攻击)风险。

  • SameSite:用于防止CSRF(跨站请求伪造)攻击。SameSite属性可以设置为Strict(严格),Lax(宽松)或None,以控制Cookie在跨站请求中是否发送。

Cookie 的使用场景
  • 会话管理:例如登录后生成的Session ID通常存储在Cookie中,客户端每次请求都会携带该Session ID,以维持会话状态。

  • 个性化设置:例如保存用户的语言偏好、主题选择等信息,用户下次访问时自动加载。

  • 跟踪和分析:用于记录用户行为、统计网站访问量等。这也是广告商用来跟踪用户跨站点行为的一种方式。

Cookie 与 Session 的关系
  • 依赖性:Session通常依赖Cookie来传递Session ID。服务器在Session创建时,会生成一个Session ID,并将其以Cookie的形式发送到客户端。客户端随后在每次请求中携带该Session ID,服务器根据Session ID来获取相应的会话数据。

  • 存储位置:Cookie存储在客户端(浏览器),而Session数据则存储在服务器上。Cookie中仅保存Session ID,不包含实际的用户数据,因此相对来说,Session的安全性更高,因为重要数据不会暴露在客户端。

Cookie 与 Token 的对比
  • 存储位置:Cookie可以由服务器生成并存储在客户端,而Token通常是由服务器生成并存储在客户端的localStorage或sessionStorage中。

  • 传输方式:Cookie会自动在每次请求时被浏览器发送到服务器(除非是HttpOnly),而Token通常需要手动添加到请求头中(例如Authorization: Bearer <token>)。

  • 安全性:Cookie有更多的安全控制选项(如HttpOnly、Secure、SameSite),但Token可以通过配置短期有效期和双重认证来增强安全性。

  • 跨域支持:Token通常在跨域情况下使用更为灵活,而Cookie在跨域情况下需要考虑CORS(跨域资源共享)政策和SameSite设置。

总结

  • HTTP 是Web通信的基础协议,本身无状态。

  • Cookie 是一种在客户端和服务器之间传递状态信息的小型文本文件,广泛用于会话管理、个性化设置和跟踪分析。

  • Session 通过在服务器端维护用户状态,利用Cookie来传递Session ID,解决了HTTP无状态的问题。

  • Token 提供了一种无状态的认证方式,适用于分布式系统和无状态服务。

在Web开发中,Cookie、Session和Token经常结合使用,各自发挥不同的作用。Cookie用于传递和保存状态信息,Session用于在服务器端保持用户状态,Token则用于实现无状态的安全认证。根据应用的需求和安全要求,开发者可以选择适合的技术或组合来实现用户身份验证和状态管理。


http://www.ppmy.cn/embedded/105174.html

相关文章

Unity AudioSource.PlayClipAtPoint听不到声音的一种情况

AudioSource.PlayClipAtPoint是按距离来控制音量的&#xff0c;所以距离太远是听不到的。而这个距离是播放音乐自动生成的GameObject名称是One shot audio的位置&#xff08;也就是输入的位置&#xff09;到AudioListener的位置。 AudioListener的位置是由其挂在的GameObject …

C++类和对象2

一.类的默认成员函数 类的默认成员函数是用户自己没有显示写出&#xff0c;而编译器会自动生成的成员函数。当需要用到这些函数时&#xff0c;编译器就会自动生成并调用。但是当用户显示写出时&#xff0c;以后再调用就会调用用户写的&#xff0c;编译器不再自动生成。下面就是…

深度解析C++中函数重载与引用

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1. 函数重载1.1 函数重载概念1.2 C支持函数重载…

数据库之心:MySQL 探索(一)mysql的安装和基本介绍

欢迎来到我们的MySQL博客&#xff01;在这里&#xff0c;我们将深入探讨MySQL数据库系统的各个方面&#xff0c;包括基础知识、优化技巧、实践案例以及最新的行业趋势。 目录 前言 什么是数据库&#xff1f; 数据库产品 MySQL安装 解压 配置 添加环境变量 初始化MySQL …

css基础学习总结(一)

文章目录 一. 选择器1. 标签选择器2. 类选择器3. ID选择器4. 分组选择器5. 派生与子元素选择器6. 属性选择器7. 伪类选择器8. 伪对象选择器9. 选择器的优先级别css优先级 的 6大分类 一. 选择器 1. 标签选择器 选择器例子描述elementp/div/span选择所有含有指定标签的元素 &…

每周12600元奖金池,邀你与昇腾算力共舞,openMind开发者盛宴启幕!

小伙伴们&#xff0c;是否瞬间被这个标题唤醒了在OpenI启智社区“我为开源打榜狂”黄金时代的温馨记忆&#xff1f;打榜活动虽已谢幕&#xff0c;但大家相伴度过12期的那份激情与创新的共鸣&#xff0c;促使OpenI启智社区在国产算力崛起的浪潮中勇立潮头&#xff0c;推出了“芯…

集成电路学习:什么是ARM先进精简指令集计算机

ARM&#xff1a;先进精简指令集计算机 ARM先进精简指令集计算机&#xff08;Advanced RISC Machine&#xff0c;简称ARM&#xff09;是一种基于精简指令集计算机&#xff08;RISC&#xff09;原则的计算机处理器架构&#xff0c;由英国的ARM公司开发。这种架构以其低功耗和高性…

【GPT】Coze使用开放平台接口-【6】Dify 也来一遍

前面讲了 coze 的相关用法&#xff0c;这边想着用 Dify 也来一遍&#xff0c;刚开始的时候接触的是 Dify&#xff0c;后面才是 coze。Dify 和 coze 的侧重点不同&#xff0c;我个人是更倾向用 Dify 构建工作流就可以了&#xff0c;coze 还是相对全能。 本节用 Dify 也会创建插…

代码随想录 刷题记录-24 图论 (1)理论基础 、深搜与广搜

一、理论基础 参考&#xff1a; 图论理论基础 深度优先搜索理论基础 广度优先搜索理论基础 dfs dfs搜索可一个方向&#xff0c;并需要回溯&#xff0c;所以用递归的方式来实现是最方便的。 有递归的地方就有回溯&#xff0c;例如如下代码&#xff1a; void dfs(参数) {…

MySQL-CGI-响应报文

账号密码涉及到&#xff1a; 与数据库已记录下来的进行校验。 如果也是来一个新建一个连接&#xff0c;必然效率低。 可以做一个数据库连接池&#xff0c;预生成数据库连接。 如何生成数据库连接&#xff1f;下面的流程做很多次。 然后放在链表中&#xff0c;&#xff08;池&am…

macos MacPort 包管理工具安装和使用

在macos v10.15版本中, xz, python等软件无法使用brew安装, 原因是brew对于旧版本的macos不再支持, 但是我们可以使用另外一个macos下的包管理工具来安装brew无法安装的软件, macport 是一个和brew类似的macos下的一个非常优秀的软件包安装管理工具. MacPort安装前提条件 安…

科研绘图系列:R语言基因PPI互作网络图(PPI network plot )

介绍 基因的PPT互作网络图。 加载R包 导入所需要的R包,在导入前需要用户自己安装。 library("tidyverse") library("magrittr") library("here") library("janitor") library("ggpubr") library("ComplexHeatmap&…

【STM32】位带操作

一、位带操作 1.意义 回想以前写51代码 ​ P0 0x10; //将P0端口设置为0x10 P1_01; //将P1端口0号引脚设置为高电平 a P2_2; //获取P2端口2号引脚的电平 根据上述的方法&#xff0c;我们可以发现快速定位修改某个引脚的电平还有获取引脚的状态 2.原因 GPIO_SetBits、GPI…

Ubuntu 22.04 镜像自定义制作

Centos封装镜像> Linux Centos ISO镜像自定义制作 Ubuntu20.04封装镜像> Ubuntu 20.04 镜像自定义制作 1、下载镜像 系统环境&#xff1a;ubuntu 22.04 镜像地址&#xff1a;https://mirrors.aliyun.com/ubuntu-releases rootubuntu:~# apt install -y p7zip xorriso ro…

Python进阶08-爬虫

零、文章目录 Python进阶08-爬虫 1、爬虫介绍 &#xff08;1&#xff09;爬虫是什么 **网络爬虫:**又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本&#xff0c;另外一些不常使用的名字还有蚂蚁、自…

应用层(Web与HTTP)

目录 常见术语 1.HTTP概况 2.HTTP连接 非持久HTTP流程 响应时间模型 持久HTTP 3.HTTP报文 3.1HTTP请求报文 3.2HTTP响应报文 HTTP响应状态码 4.Cookies&#xff08;用户-服务器状态&#xff09; cookies&#xff1a;维护状态 Cookies的作用 5.Web缓冲&#xff08;…

视频智能分析打手机检测算法安防监控打手机检测算法应用场景、算法源码、算法模型介绍

随着智能手机的普及&#xff0c;手机已成为人们生活中不可或缺的一部分。然而&#xff0c;在某些场合&#xff0c;如驾驶、会议、学校课堂等&#xff0c;不当使用手机可能会导致安全隐患或干扰他人。因此&#xff0c;开发出一种能够准确识别并阻止不当使用手机的行为检测算法显…

TPM管理咨询公司一走,企业又恢复原样,为什么?

在探讨“TPM管理咨询公司离开后&#xff0c;企业为何常常恢复原样”这一深刻问题时&#xff0c;我们不得不深入剖析TPM理念的本质、实施过程中的挑战以及企业在持续变革中面临的普遍困境。TPM作为一种以最大化设备综合效率为目标的生产维护体系&#xff0c;其核心理念在于通过全…

C++ 消息分发类:详细示例应用

消息分发的概念 消息分发&#xff08;Message Dispatching&#xff09;是一种设计模式&#xff0c;广泛用于处理异步事件和消息。在 C 中&#xff0c;消息分发类通常用来接收和分发来自多个源的消息&#xff08;如网络连接、传感器数据、用户输入等&#xff09;&#xff0c;并根…

如何使用 Canvas 和 Paint 进行绘制,以及如何处理自定义属性和解析 XML 属性

在 Android 中&#xff0c;自定义 View 的绘制通常涉及使用 Canvas 和 Paint 两个关键类。Canvas 提供了一个用于绘制图形的界面&#xff0c;而 Paint 则用来定义绘制的风格和颜色。以下是如何使用 Canvas 和 Paint 进行绘制的步骤&#xff0c;以及如何处理自定义属性和解析 XM…