接口基础知识12:cookie、session和token

news2024/9/20 8:54:41

​课程大纲

‌Cookie、Session和Token是Web应用中常用的身份验证和会话管理机制,各有特点,适用于不同的应用场景。

一、Cookie

1.1 什么是Cookie

Cookie是存储在客户端浏览器中的小段数据,通常用于存储用户偏好设置或用于跟踪用户活动。

Cookie可以包含用户身份验证的信息,如会话ID,但存储在客户端的Cookie信息可能会被用户清除或被第三方拦截。

优点:易于实现和设置。

缺点:安全性较低,因为数据存储在客户端,容易被篡改或窃取。

1.2 Cookie的组成

(Chrome浏览器查看Cookie)

1.Name:Cookie的名称。

2.Value:对应名称的值。

3.Domain:Cookie的域名。

4.Path:Cookie生效的路径(和Domain组合)。

5.Expires:过期时间,过了这个时间后Cookie失效。3种取值:

        ① 整数数值:秒数,超时后过期。

        ② UTC时间字符串。例如:2024-08-25T04:36:07.006Z。

        (T是一个分隔符,Z代表UTC即世界标准时间,是格林尼治时间时间,即北京时间减8h)

        ③ Session:浏览器会话结束,清除cookie。

        一般用户关闭浏览器窗口或标签页时,cookie将不再存在;而一些浏览器重启时,也会将会话恢复,此时Cookie并不会失效。

6. Max-age:生效时间,表示Cookie在多长时间后失效。(整数数值:秒数,超时后过期。)

7. Size:Cookie的长度,name和value的长度和(字节数)。

(不同浏览器cookie个数和大小的限制)

8.HttpOnly:True/False。只允许http请求访问使用cookie,禁止JavaScript读取或修改Cookie。

9.Secure:True/False。是否只允许加密协议HTTPS协议传输Cookie。

10.SameSite:是否允许跨站请求时发送Cookie。

是否跨域

是否跨站

子域名不同,

如:a.txm.com与b.txm.com

×

端口不同,

如:txm.com:8000与txm.com:9000

×

IP不同(直接使用IP访问网站)

11.Partitioned:第三方Cookie分区。

12.Priority:优先级。

详见参考文章《浏览器中Cookie的全面介绍》:

https://blog.csdn.net/qq278672818/article/details/131753651

1.3 Cookie的传递方式

Cookie通过请求头和响应头传输。

(请求header里的Cookie)

客户端请求头中Cookie格式

Cookie:key1=value1;key2=value2…;key100=value100

服务器响应头设置Cookie

Set-Cookie:`name=value` [; expires=`date`] [; domain=`domain`] [; path=`path`] [; secure] [; httponly] [; samesite=`strict`/`lax`/`none`]

二、Session

2.1 什么是‌Session

‌Session是服务器端用来跟踪用户会话状态的一种机制。

用户首次访问网站时,服务器会创建一个唯一的会话标识(session ID),并将其存储在用户的Cookie中。服务器通过这个会话标识来识别用户,并保持用户的会话状态。

优点:安全性较高,因为会话数据存储在服务器端,不易被篡改或窃取。

缺点:

① 访问用户多时,可能会造成服务器压力;

② 如果网站架构涉及多个服务器,需要解决Session共享的问题,增加实现的复杂性和成本。

2.2 ‌Session的传递方式

① 使用服务器端的session对象:将要传递的值存储在服务器端的session对象中,然后在不同的页面中读取该session对象获取传递的值。

② 使用URL参数:将要传递的值作为URL的参数传递给下一个页面,下一个页面可以通过获取URL参数来获取传递的值。

③ 使用表单或链接:将要传递的值放在表单的隐藏字段中或者作为链接的参数,在提交表单或点击链接时将值传递给下一个页面。

举例:写一个隐藏的输入框,用户无法看到。

<form id="hiddenForm" action="your-server-endpoint" method="post" style="display: none;"><input type="text" name="username" /><input type="password" name="password" /> <input type="hidden" name="csrf_token" value="your_csrf_token" /></form>

④ 使用cookie:将要传递的值存储在cookie中,在下一个页面读取cookie获取传递的值。

举例:

Cookie: session_id=txm001;user=tuxiaomao

三、Token

3.1 什么是‌Token

Token是一种认证令牌,通常是一小段加密字符串,可以存储在Cookie中或直接作为HTTP请求头的一部分发送。

Token的认证方式类似于临时的证书签名,是一种服务端无状态的认证方式,服务端不会保存与用户相关的任何状态信息,每次请求时只需验证Token的有效性。

优点:安全性较高,因为Token不会被浏览器自动发送到不安全的域,且可以通过加密算法确保其不可伪造性。

缺点:如果Token被泄露,可能会导致安全问题。

3.2 ‌Token的传输方式

① 存储在Cookie中或直接发送。

格式:

Cookie:token=Basic [编码后的字符串]

Cookie:token=Bearer [编码后的字符串]

举例:

Cookie:token=Basic dHV4aWFvbWExMjM0NTY=

② HTTP请求头的一部分发送(使用Authorization字段

格式:

Authorization:Basic [编码后的字符串]

Authorization:Bearer [编码后的字符串]

举例:

Authorization: Bearer sfakgnkasnfdaoie=

3.3 Basic token和Bearer token

Basic token和Bearer token是两种不同的身份验证方式。 

Basic token:用户名和密码使用base64编码后,加前缀“Basic [token字符串]”(注意有空格)。

举例:tuxiaomao123456经过base64编码后,如下。

Authorization:Basic dHV4aWFvbWExMjM0NTY=

Bearer token:调用登录接口,发送用户名密码登录成功,服务器随机返回一个自定义的加密token字符串,客户端接收后,使用该token进行后续请求。

对比项

Basic token

Bearer token

token生成端

客户端

服务器

生成方式

用户名+密码Base64编码。

登录接口,服务器创建并返回。

加密方式

Base64编码(通用编码)

系统自定义加密方式

安全性

低(易破解)

时效性

有,过期失效(如2h)

token特点

只要用户名密码不变,token固定不变。

token不固定,每次登录返回新token,过期失效需重新登录获取。

总结

Cookie适用于简单的身份验证和跟踪用户活动,但安全性较低;

Session提供了较高的安全性,通过服务器端管理会话状态,但需要解决跨服务器会话共享的问题;

Token则提供了较高的安全性,适用于REST API等无状态服务,但需要注意Token的管理和安全性问题。‌

参考文章:

1、《浏览器中Cookie的全面介绍》

https://blog.csdn.net/qq278672818/article/details/131753651

2、《session跨页面传值的方法是什么》

https://www.yisu.com/ask/56108246.html

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

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

相关文章

51单片机——数码管控制

1、数码管介绍 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成“8”字型的器件。 2、数码管驱动方式 单片机直接扫描&#xff1a;硬件设备简单&#xff0c;但会耗费大量的单片机CPU时间 专用驱动芯片&#xff1a;内部自…

8月24日笔记

ew的使用 EW&#xff08;EarthWorm&#xff09;是一套基于C语言开发的轻量级且功能强大的网络穿透工具&#xff0c;它支持Socks5代理、端口转发及端口映射等功能&#xff0c;能够在复杂的网络环境中实现高效稳定的网络穿透。这款全平台适用的工具&#xff08;包括Windows、Lin…

proc文件的写操作机制

“一切皆是文件”。 Linux的基本哲学之一。它是指linux系统中的所有一切都可以通过文件的方式访问、管理&#xff0c;即便不是文件&#xff0c;也以文件的形式来管理。例如硬件设备、进程、套接字等都抽象成文件&#xff0c;使用统一的用户接口&#xff0c;虽然文件类型各不相同…

ComfyUI IPAdapter plus的模型应该怎么装-免费版-2024.8.25

&#x1f386;背景 ipadapter相关的节点大家应该都不陌生&#xff0c;具体是做什么的就不详细介绍了&#xff0c;但是还是有很多新入门的朋友不太了解这个节点相关的这一堆模型到底应该怎么安装。这里就借着官方节点的介绍来大概讲下这个话题。 涉及到的节点源地址&#xff1…

大数据技术之Zookeeper安装 (2)

目录 下载地址 本地模式安装 1&#xff09;安装前准备 2&#xff09;配置修改 3&#xff09;操作 Zookeeper 配置参数解读 Zookeeper 集群操作 集群规划 解压安装 配置服务器编号 配置 zoo.cfg 文件 集群操作 Zookeeper 集群启动停止脚本 创建脚本 增加脚本执行权限 …

宠物毛发会携带病菌源吗?宠物店空气净化器使体验分享

近期&#xff0c;我接诊了一位肺结节患者&#xff0c;他的第一反应便是联想到家中的猫咪。这种担忧并非毫无根据&#xff0c;过敏体质的人群&#xff0c;无论是对毛发还是排泄物敏感&#xff0c;养宠物都会增加患结节的风险。即便不存在过敏问题&#xff0c;宠物毛发作为病菌的…

Transforms的学习以及地址问题

一、地址问题 在学习Dataset类的实战与Tensboard的学习中&#xff0c;有出现一些地址的问题&#xff1a; 1、相对地址 相对地址的使用&#xff1a; 使用于在从端口中&#xff0c;打开TensorBoard的页面。使用的就是相对地址&#xff1b;例如&#xff1a; tensorboard --log…

MySQL创建与删除表

一、创建表 1.1 使用DDL语句创建表 CREATE TABLE 表名(列名 类型,列名 类型......); character set&#xff1a;如不指定则为所在数据库字符集collate&#xff1a;如不指定则为所在数据库校对规则 查看表 show tables; 1.2 使用Navicat创建表 二、删除表 2.1 使用DDL语句删除…

chapter08-面向对象编程(继承)day08

目录 287-继承原理图 288-继承快速入门 289-继承使用细节1 290-继承使用细节2 291-继承使用细节3 292-继承使用细节4 293-继承使用细节5 294-继承本质详解&#xff08;重要&#xff09; 287-继承原理图 288-继承快速入门 289-继承使用细节1 子类继承了所有的属性和方法…

特拉维斯凯尔西花了5位数给女友泰勒斯威夫特买了一份令人惊讶的贺礼

说实话&#xff0c;我们已经记不清特拉维斯凯尔西今年为泰勒斯威夫特花了多少钱了。据报道&#xff0c;他花了近 10 万美元购买意大利服装和甜食&#xff0c;现在&#xff0c;据报道&#xff0c;他为斯威夫特购买鲜花花费了五位数。 消息人士告诉媒体&#xff0c;凯尔西从 Mil…

超分之最近邻插值、线性插值、双线性插值、双三次插值原理

文章目录 插值与图像插值不同的插值方法最近邻域插值&#xff08;Nearest Neighbor Interpolation&#xff09; 线性插值 (Linear Interpolation)双线性插值 (Bilinear Interpolation) 双三次插值 (Bicubic Interpolation) 插值与图像插值 插值&#xff1a;利用已知数据去预测…

Redis面试都卷到C语言去了。。。

Redis 面试都卷到 C 去了。有个小伙伴在前两天找松哥模面的时候如是说到。 是啊&#xff0c;没办法&#xff0c;自从 Java 八股文这个概念被提出来并且逐步在 Java 程序员中强化之后&#xff0c;现在各种各样的八股文手册&#xff0c;有免费的有付费的&#xff0c;琳琅满目。 …

实验11 编写子程序《汇编语言》- 王爽

1. 需求 编写一个子程序&#xff0c;将包含任意字符&#xff0c;以 0 结尾的字符串中的小写字母转变成大写字母&#xff0c;描述如下。 名称&#xff1a;letterc 功能&#xff1a;将以 0 结尾的字符串中的小写字母转变成大写字母 参数&#xff1a;ds:di 指向字符串首地址 …

快速排序模版

1.霍尔法 #include <iostream> using namespace std; int partition(int *arr,int left,int right){int pivotIndexleft;while(left<right){while(left<right && arr[right]>arr[pivotIndex]){right--;}while(left<right && arr[left]<a…

新160个crackme - 040-DaNiEl-RJ.1

运行分析 需要破解Name和Serial PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida搜索字符串&#xff0c;找到关键字符串进入 对关键函数进行动调分析&#xff0c;注释和变量重命名如上还需要破解sub_4036E8 通过对比sub_4036E8函数的返回值和Nam…

python面向对象—封装、继承、多态

封装 当定义为私有成员变量时&#xff0c;引用或者打印都不可行。 私有成员对于类对象没有办法直接使用&#xff0c;但是我们类中其他成员却是可以访问这些私有成员的。 封装总结&#xff1a; 私有成员的定义我们已经了但是有什么实际的意义吗&#xff1f; 继承 继承表示&…

系规学习第19天

1.知识管理流程的目标是将运维生产过程中产生的各类信息所包含的知识最大限度地提取、保留&#xff0c;通过评审后加以应用&#xff0c;包括&#xff1a;实现知识共享&#xff0c;实现知识转化&#xff0c;避免知识流失&#xff0c;提高运维响应速度和质量&#xff0c;挖掘、分…

scrapy--图片管道-ImagesPipeline

免责声明:本文仅做演示与分享~ 目录 介绍 ImagesPipeline pipelines.py items.py zz.py settings.py 介绍 scrapy 还提供了处理图片、视频、音频等媒体文件的插件&#xff0c;如&#xff1a; - scrapy-images&#xff1a;用于下载和处理图片 - scrapy-video&#xff1…

<C++> 二叉树进阶OJ题

目录 1. 二叉树创建字符串 2. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 3. 二叉树搜索树转换成排序双向链表 4. 根据一棵树的前序遍历与中序遍历构造二叉树 5. 根据一棵树的中序遍历与后序遍历构造二叉树 6. 二叉树的前序遍历&#xff0c;非递归迭代实现 7. 二…

13.全志H3-底板测试和测试记录

上面是我的微信和QQ群&#xff0c;欢迎新朋友的加入。 前段时间&#xff0c;做了一个H3的双DDR方案&#xff0c;记录一下测试过程。 1.硬件速率检测 1.取掉SD卡&#xff0c;不接调试串口&#xff0c;按住复位按键&#xff0c;上电 设备管理器会弹出USB设备&#xff0c;打开硬…