Cookie,Session与Token解析

前言

在进行用户的授权认证时主要可以有三种方式,分别是Cookie,Session与Token,本文将对它们进行简要的介绍并总结他们三者之间的区别。

Cookie

首先,什么是Cookie?
简而言之,Cookie就是是一些数据,类型为“小型文本文件”,会以key-value的形式存储于电脑上的文本文件中。主要用于存储服务器返回给客服端的信息,然后在客户端中进行保存。在下一次访问该网站时,客户端会将保存的Cookie一同发给服务器,服务器再利用Cookie进行一些操作,比如使用Cookie记录用户的登录状态信息。

Cookie具有以下特性:

  • cookie是不可跨域名的,因此具有局限性。
  • cookie会被附加在每个HTTP请求中,因此增加了流量。
  • 由于在HTTP请求中的cookie是明文传递的,所以安全性成问题,但如果用HTTPS就可以。
  • Cookie的大小限制在4KB左右,因此不能储存复杂大量的数据。

Session

什么是Session?

Session就是会话,Session会为每一次会话分配一个Session对象,它是由服务器创建,并且存储在服务器中,会存下用户的对应信息作为一个身份标记,这样做是为了让服务器知道某个请求是谁发送过来的。因此Session一般就是用来对用户的信息进行存储。而客户端也会存储这个身份标记,默认会用cookie来存储。

并且session可传递任何数据,比如像基本数据类型、对象、集合、数组等等。上面说过cookie存储于电脑上的文本文件,而session在是存储在内存中的。

但是session也具有很多的缺点:

  • 每个用户在登录之后就会记录下一个session并把会话的所有信息储存在内存之中,这样就会时服务器的压力较大。并且session在分布式中是非常不方便的,因为分布式通常是几个服务之间的调用,而session把认证信息储存在一个服务器中,所以就限制了分布式负载均衡的能力。
  • session的信息是不安全的,如果被截获,就可能会受到跨站脚本攻击(XSS)和跨站请求伪造攻击(CSRF)。
  • 在跨域使用不方便,因为session默认只会在一个域名下,因此在后端多节点场景中会很受限制。

Token

什么是Token?

token可以被称之为令牌,它是服务端生成的一串字符串,以作客户端进行请求的一个令牌。比如当在用户进行第一次登录后,服务器就会生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,就不需再携带更多的数据来进行身份验证。这样可以减轻服务器的压力,减少频繁的查询数据库,提升性能。

如何生成token?

生成token可以使用多种方法,生成的原则就是要对信息进行加密,不能泄露。

第一种方法就是使用JWT:JWT是一种开放的标准,用于在网络应用程序之间安全地传输信息。它可以使用HS256、HS384、HS512等算法生成安全的token。它的优点是易于实现和使用。

关于其详细介绍可以看我的另一篇博客:JWT详解

还可以使用OAuth2:OAuth2是一种标准的授权协议,通常用于API授权。它可以用于生成token来访问受保护的资源。OAuth2的优点是安全性高,支持多种授权方式。

而token就具有很多优点:

首先它是无状态可扩展的,在客户端存储的Tokens是无状态的且数据量小,传输的就会很快,不会给服务器很大的压力。并且能够被扩展,能够创建与其它程序共享权限的程序。基于这种无状态和不存储Session信息,负载负载均衡器能够将用户信息从一个服务传到其他服务器上。

其次它是安全的,在请求中发送token,而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证。

并且其可以实现多平台跨域,不在局限于一个平台。

区别

最后总结以下三者的区别

cookie与session的区别

  • cookie的数据信息存放在客户端浏览器上,session的数据信息存放在服务器上。
  • 单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
  • cookie中只能保管ASCII字符串,并需要通过编码方式存储为Unicode字符或者二进制数据,session中能够存储任何类型的数据。
  • cookie对客户端是可见的,所以它是不安全的。session存储在服务器上,对客户端是透明的,不存在敏感信息泄漏的风险,是比较安全的。
  • 通过设置cookie的属性,达到使cookie长期有效的效果。session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。
  • cookie支持跨域名访问,session不支持跨域名访问。

Session和Token的区别

  • token中的数据是加密的,更加的安全,而session中没有加密。
  • token支持跨域名访问,session不支持跨域名访问。
  • Session是存储在服务器内存中,这就意味着如果网站或者应用很大的情况下会耗费大量的资源。由于token是无状态的,在许多情况下,它们可以节省服务器资源。因此token要比 Session具有更强的可扩展性。
  • Session是存放在服务器端的,oken是放在客户端存储的。

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

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

相关文章

在cmd菜单中使用自定义命令通过bat和powershell命令调用翻译API

先说一个血淋淋的结果&#xff0c;这个小功能其实在github已经有大佬帮我们封装好了&#xff0c;我也是自己刚倒腾好之后才发现的&#xff0c;所以如果只是需要这个功能的朋友可以直接移步这个项目&#xff1a;https://github.com/kenshinji/yddict&#xff0c;自己电脑安装一个…

Linux 磁盘分区步骤

1.lsblk用于查看磁盘分区情况&#xff0c;lsblk -f用于查看uuid字符串以及挂载点。 以下是虚拟机部分添加磁盘的步骤。 其余没展示的都按照默认设置进入下一步即可。 2.添加完成后使用reboot重新进入后再使用lsblk就会发现磁盘sdb已经有了&#xff0c;但是没有分区。现在添加分…

007 异步同步

文章目录 异步、同步、阻塞和非阻塞是计算机科学中常用的术语&#xff0c;尤其在网络通信和多线程编程中。这些术语描述了不同的数据交换和处理方式。下面我将逐一解释这些概念&#xff1a; 异步&#xff08;Asynchronous&#xff09;与同步&#xff08;Synchronous&#xff0…

三十六、openlayers官网示例Earthquake Clusters解析——在聚合图层鼠标触摸显示五角星

官网demo地址&#xff1a; Earthquake Clusters 这篇展示了鼠标触摸聚合图层点位显示五角星的效果。 首先是初始化地图&#xff0c;加载了一个KML格式的矢量数据源&#xff0c;extractStyles为false表示不从kml数据源中提取样式。使用Select添加了鼠标选中的交互事件 vector …

充电桩软硬件,赚钱新招数!

开源 | 愣子充电桩平台 | 慧哥充电桩平台V2.5.2&#xff08;支持 汽车 电动自行车 云快充1.5、云快充1.6 微服务 &#xff09;https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 充电桩软件和硬件一体化的盈利方向可以清晰地归纳为以下几个主…

【Kubernetes】 emptyDir、nfs存储卷 和 PV、PVC

emptyDir存储卷 当pod被分配给节点 容器和容器之间进行共享存储 hostPath nfs共享存储卷 NAS 专业的存储设备&#xff1b;一般是与NFS 搭配&#xff0c;然后共享出去 GFS 自己搭&#xff1b;CEPH(至少要9台) 第三方&#xff1b;NAS 第三方&#xff1b; 云端 oss …

【wiki知识库】05.分类管理模块--后端SpringBoot模块

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、☀SpringBoot代码修改 1.使用逆向工程生成Category表结构 2. 新增CategoryQueryParam 3.新增CategorySaveParam 4.新增CategotyQueryVo 三、&#x1f916;新增分类管理的相关接口…

学习分享-面向分布式服务架构的流量管理工具Apache Sentinel

前言 最近学习过程中有接触到Apache Sentinel这个工具&#xff0c;所以就分享一下相关的资料和知识。 Apache Sentinel是阿里巴巴开源的一款面向分布式服务架构的流量管理工具&#xff0c;主要用于流量控制、熔断降级和系统负载保护。Sentinel提供了一整套完善的流量管理方案&…

人脸识别系统代码--相机抓取

1.导入库 import cv2 import os import tkinter as tk from tkinter import filedialog import subprocess from PIL import Image, ImageTk 2.设置窗口 win tk.Tk() win.title(相机抓取) win.geometry(750x600) 3.设置背景 image Image.open("11.gif") image…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能&#xff0c;Smart Home Skill Apis时&#xff0c;有一个配置的JSON字符串是这样的&#xff1a; { "capabilityResources": {"friendlyNames": [{"type": "asset",…

python图像识别库-pytesseract

内容目录 一、安装1.安装tesseract OCR1) MAC中安装2) Windows中安装3) 中文报下载 二、pytesseract的简单使用 pytesseract是python的一个用于图像提取的库, 它实际上是对Tesseract OCR引擎的封装。pytesseract使得在Python项目中调用Tesseract变得更加简便&#xff0c;主要用…

17K star,一款开源免费的手机电脑无缝同屏软件

导读&#xff1a;白茶清欢无别事&#xff0c;我在等风也等你。 作为程序员&#xff0c;在我们的工作中经常需要把手机投票到电脑进行调试工作&#xff0c;选择一款功能强大的投屏软件是一件很必要的事情。今天给大家介绍一款开源且免费的投屏软件&#xff0c;极限投屏&#xff…

Arthas调优工具使用

1&#xff0c;服务器端下载 curl -O https://arthas.aliyun.com/arthas-boot.jar 2&#xff0c;服务器端启动 java -jar arthas-boot.jar 选定要绑定的Java进程ID 3&#xff0c;本地idea安装Arthas idea 4&#xff0c;选定方法右键trace,生成命令 trace com.xxx.xxx.xxx.vouche…

C语言数据结构快速排序的非递归、归并排序、归并排序的非递归等的介绍

文章目录 前言一、快速排序非递归二、归并排序五、归并排序非递归总结 前言 C语言数据结构快速排序的非递归、归并排序、归并排序的非递归等的介绍 一、快速排序非递归 快速排序非递归的定义 快速排序非递归&#xff0c;需要使用栈来实现。将左右下标分别push到栈中。在栈为…

处理机调度

目录 处理机调度概述 1. 作业调度&#xff08;Job Scheduling&#xff09; 2. 中级调度&#xff08;Medium-term Scheduling&#xff09; 3. 进程调度&#xff08;Process Scheduling&#xff09; 调度算法 1. 先来先服务&#xff08;FCFS&#xff09; 2. 最短作业优先&a…

基于Tricore的Tasking链接文件解读

目录 1.链接文件有什么用&#xff1f; 2.文件结构和语法解析 2.1 文件结构 2.2 语法解析 3.小结 玩惯了ld文件&#xff0c;突然让搞lsl&#xff0c;被其中花里胡哨的语法搞晕了&#xff0c;例如&#xff1a; memory cpu0_dlmu{mau 8;size 64k;type ram;map cached …

qt 加载字体 c++

目录 qt 加载字体 c label设置大小和字体&#xff1a; pro配置&#xff1a; resource.qrc qt 加载字体 c #include <QApplication> #include <QLabel> #include <QFontDatabase> #include <QVBoxLayout> #include <QWidget>int main(int ar…

腾讯中视频计划项目玩法,号称执行就有收入

腾讯中视频掘金计划是一个创新的短视频创作与分享平台&#xff0c;类似于西瓜视频&#xff0c;允许用户发布原创视频内容&#xff0c;并将其同步至腾讯旗下的多个平台&#xff0c;用户基数大&#xff0c;相信视频播放量也会比较大。 操作流程&#xff1a; 1. 注册并登录腾讯中…

深入对比:Transformer与RNN的详细解析

在深度学习领域&#xff0c;特别是在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;循环神经网络&#xff08;RNN&#xff09;和Transformer模型都扮演着举足轻重的角色。然而&#xff0c;随着技术的不断发展&#xff0c;Transformer模型逐渐崭露头角&#xff0c;成为…

OrangePi 安装 CANN 套件及体验 AI 应用

CANN 环境安装&#xff08;桌面端跳过&#xff09; CANN 环境存在于下载页面的官方工具中&#xff0c;点击下载即可进入下载页面。 CANN 安装包就在倒数第二项&#xff0c;下载后传到开发板上。 给 CANN 安装包赋予运行权限并运行即可。 chmod x Ascend-cann-toolkit_7.0.0_l…