cookie/session/token三者区别和优缺点

cookie/session/token三者区别和优缺点

  • cookie
  • session
  • token
  • 三者对比

cookie

cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。==所以cookie是保存在浏览器的客户端。==一般会存储用户的身份信息,有些系统也会通过cookie记录一些用户的操作习惯。

优点:

  • 易于使用,可以由服务器在响应头中设置。
  • 大多数浏览器支持并在所有请求中发送cookie。
  • 可以存储大量数据。
  • 与服务器保持状态,有助于进行状态管理。

缺点:

  • 大小限制(通常为4KB)并且浏览器都限制一个站点最多保存20个cookie。
  • 易于遭到XSS攻击,因为存储在客户端,攻击者可以访问。
  • CSRF攻击,需要额外的防护措施。
  • 隐私问题,用户数据存储在本地,并且数据可以被轻易查看。。
  • 性能影响,每次请求都会发送cookie数据。
  • 字符编码为 Unicode,不支持直接存储中文。
  • 不可跨域

session

Session是一种在服务器端存储用户会话信息的方式,通常与Cookie配合使用,以保持用户的状态。Session的优点包括安全性较高因为数据保存在服务器端,不易被篡改;其缺点包括可能增加服务器的负担,特别是在高并发情况下,以及可能面临扩展性问题,如服务器集群时的Session同步问题。

优点:

  • 存储空间较cookie大。
  • 不会被保存在客户端,相对更安全。
  • 可以使用服务器端存储,如数据库,可以更容易进行扩展。

缺点:

  • 需要在服务器端保存,增加服务器负担。
  • 依赖于服务器,服务器宕机或重启会导致数据丢失。
  • 无法跨域进行session管理。
  • 用户登录后,服务器需要维护用户状态,增加服务器负担。

token

Token则是在服务器端生成并在认证过程中分发给客户端的数据片段,通常用于验证客户端的身份。Token可以包含用户的身份信息和权限声明,存储在服务器的数据库中;客户端可以将Token保存在任何地方,如本地存储或服务器端的缓存系统中。Token 可以有效地避免了 Cookie 的一些安全问题,比如 CSRF (跨站请求伪造)攻击。

优点:

  • 无需在服务器端保存session信息,减少服务器负担。
  • 支持跨域会话(只要客户端携带token即可)。
  • 无状态、可扩展性好。
  • 支持移动设备使用。
  • 安全性较高,不需要保存在客户端。
  • 不需要依赖cookie,可以避免XSS和CSRF攻击。

缺点:

  • 如果token被盗,那么攻击者可以不受限制地访问数据。
  • 每次请求需要传输token,可能会增加带宽消耗。
  • 服务器不能主动向客户端发送信息,需要依赖于客户端轮询或者长轮询。

三者对比

cookie、session、token三者最终的目的都是一样:鉴权和认证,下面使用表格的方式直观的描述下三者的优缺点。

方式特点优点缺点
cookie1.存储在客户端。
2.请求自动携带 cookie。
3.存储大小 4KB。
1.兼容性好,因为是比较老的技术。
2.很容易实现,因为 cookie 会自动携带和存储。
1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。
2.会遭受 CSRF 攻击。3.存储在客户端,不够安全。
session1.存储在服务端。
2.存储大小无限制。
1.查询速度快,因为是个会话,相当于是在内存中操作。
2.结合 cookie 后很容易实现鉴权。
3.安全,因为存储在服务端。
1.耗费服务器资源,因为每个客户端都会创建 session。
2.占据存储空间,session 相当于存储了一个完整的用户信息。
token1.体积很小。
2.自由操作存储在哪里。
1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。
2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。
3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。
1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。

总结下来就是session 是空间换时间,token 是时间换空间。

cookie数据存放在客户的浏览器上、session数据放在服务器内存上、token存储在服务器数据库上

参考文章:https://zhuanlan.zhihu.com/p/631349844

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

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

相关文章

后端返还二进制excl表格数据时候,如何实现在前端下载表格功能及出现表格打开失败的异常处理。

背景: 后端返还一个二进制流的excl表格数据,前端需要对其解析,然后可提供给客户进行下载。 思路:把二进制流数据转换给blob对象,然后利用a标签进行前端下载。 代码: 后端返还 类似如下的数据 前端代码…

每日一题 --- 前 K 个高频元素[力扣][Go]

前 K 个高频元素 题目:347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: …

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

AI绘画:使用Stable Diffusion ComfyUI进行换脸:IPAdapter FaceID全面教程

在数字艺术和媒体编辑领域,换脸技术已经成为一种流行且强大的工具。它允许创作者将一个人物的面部特征无缝地转移到另一个人物上,创造出令人信服的视觉作品。Stable Diffusion ComfyUI提供了一个高效的平台,让用户能够轻松地实现换脸。本文将…

Useros.environ[“CUDA_VISIBLE_DEVICES“] = “1“

在Python中,os.environ["CUDA_VISIBLE_DEVICES"] "1"这行代码的作用是设置环境变量CUDA_VISIBLE_DEVICES为"1"。这通常用在基于CUDA的应用程序中,尤其是在使用NVIDIA GPU进行深度学习开发时。环境变量CUDA_VISIBLE_DEVIC…

某奇蓝牙平台开发要点

zkhengyang,可申请加入数字音频系统研究开发交流答疑群 0 芯片型号 WQ7034AX 分为两种类型sdk,2.1版本sdk,以及支持LE Audio版本的SDK 1 开发环境搭建,分为linux环境和windows环境,使用linux方式搭建方便在服务器上…

JSON的定义和基本使用

1、JSON的特点: JSON是一种轻量级的数据交换格式,是由字符串化的键值对构成。基于网络的前后端通信,数据在服务端和客户端之间进行传输,采用的就是JSON的格式来进行交互。JSON采用完全独立于语言的文本格式,JSON的数据格式完全独…

日期(蓝桥备赛)

1.顺子日期 问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结 果输出即可。 小明特喜欢顺子。顺子指的就是连续的三个数字: 123、 456等。顺 子日期指的就是在日期的yyyymmdd示法冲,存在任意连续的三 位数是一个顺子的…

OpenHarmony相机和媒体库-如何在ArkTS中调用相机拍照和录像。

介绍 此Demo展示如何在ArkTS中调用相机拍照和录像,以及如何使用媒体库接口进行媒体文件的增、删、改、查操作。 本示例用到了权限管理能力ohos.abilityAccessCtrl 相机模块能力接口ohos.multimedia.camera 图片处理接口ohos.multimedia.image 音视频相关媒体业…

了解以太坊虚拟机(EVM)

了解以太坊虚拟机(EVM) 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是以太坊网络的核心组件之一,它承担着智能合约执行的重要任务 特点 智能合约执行环境:EVM提供了一个安全的环境&#xf…

易宝OA ExecuteSqlForDataSet SQL注入漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA ExecuteSqlForDataSet接口处存在SQL注入漏洞,未经身份认证的攻击者可以通过…

韩顺平Java | C24 MySQL数据库

MySQL安装和配置 MySQL5.7(稳定)、Navicat、SQLyog MySQL三层结构:数据库管理系统DBMS-数据库DB-表Table(行/记录-用对象表示) 使用命令行窗口连接MySQL数据库 net stop mysql服务名 net start mysql服务名 mysql -h 主机名 -P端口 -u用户…

k8s部署微服务例子

一、部署服务 需要部署minio、nacos、mysql、consul、elasticsearch、视频解析服务、nfs、skywalking-oap及ui。 二、三个微服务程序 minio服务解析视频-》上传到minio进行存储,构造领域对象信息保存到hive(hive on spark)异步处理-》元数据…

第十三题:天干地支

题目描述 古代中国使用天干地支来记录当前的年份。 天干一共有十个,分别为:甲(jiǎ)、乙(yǐ)、丙(bǐng)、丁(dīng)、戊(w)、己&a…

centos 如何安装nvidia-container-runtime

在CentOS上安装nvidia-container-runtime,首先需要确保你的系统已经安装了NVIDIA的驱动和docker。以下是安装步骤: 确保Docker已安装: sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/lin…

最新流行IT技术

最新流行IT技术 前端技术对应链接Reacthttps://react.docschina.org/docs/getting-started.htmlVuehttps://cn.vuejs.org/v2/guide/Ant-Designhttps://ant.design/docs/react/introduce-cnMateriaEl-UIhttps://mui.com/zh/getting-started/usage/Echartshttps://echarts.apach…

Acwing-石子合并

282. 石子合并 - AcWing题库 所需知识&#xff1a;区间dp 区间dp模板题。 区间dp常用模板&#xff1a; for (int len 1; len < n; len) { // 遍历区间的长度for (int i 1; i len - 1 < n; i) { // 枚举区间起点int j i len - 1; // 区间…

STM32-05基于HAL库(CubeMX+MDK+Proteus)串行通信案例(中断方式接收命令)

文章目录 一、功能需求分析二、Proteus绘制电路原理图三、STMCubeMX 配置引脚及模式&#xff0c;生成代码四、MDK打开生成项目&#xff0c;编写HAL库的功能代码五、运行仿真程序&#xff0c;调试代码 一、功能需求分析 在中断机制实现按键检测的案例之后&#xff0c;我们介绍串…

无问芯穹 MaaS AI 平台公测免费试用笔记:二

上一篇笔记中&#xff0c;聊过了无问芯穹的 MaaS 服务中的“虚拟机”产品。本篇文章来聊聊最近宣传中提到的大手笔免费百亿 Token 用量的“大模型服务平台” 吧。 分享下这个支持异构芯片推理的国产 “Replicate”、模型市场服务使用的经验和小技巧。 写在前面 本篇文章根据…

004 CSS介绍2

文章目录 css最常用属性link元素进制css颜色表示浏览器的渲染流程(不含js) css最常用属性 font-size 文字大小 color:前景色(文字颜色) background-color:背景色 width:宽度 height:高度 link元素 也可以用来创建站点图标 link元素常见属性 href:指定被链接资源的URL rel:指…