cookie,session,token

目的:解决用户登录状态

从一个简单的登录开始说起,

在我们访问bilibili的时候,第一次需要登录,但后续就不需要登录了,可以直接访问bilibili。

而且每次在页面请求服务器的资源都需要维持登录状态,如果没有使用任何一种技术(cookie,session,token),则需要我们每次请求的时候,都需要将账号密码包含在请求中,这种方式,既不安全,也很麻烦。

那有没有什么好的解决办法呢?

这时候cookie出现了,cookie在客户端-服务器之间的流程如下:

也就是使用了cookie后,用户在第一次成功登录后,服务器会将用户的信息响应到客户端中,客户端(浏览器)会将用户信息保存到cookie中,也就是在客户端中保存了用户信息。那么在之后的每次访问服务器过程中,客户端(浏览器)会自动将cookie的内容包含在请求头(request header)中,如此便维持了用户的登录状态。

但这种方式会有很多的问题:

  • 不安全,用户信息存储在客户端,客户可以修改信息

  • 容量有限,默认4kb

  • 用户可以禁用cookie

于是,session技术出来了,不同于cookie把内容存储在客户端,session把内容信息存储在服务器端。

在用户成功登录后,服务器会生成一个sessionID,并将sessionID响应到客户端中,客户端自动将sessionID保存在浏览器的cookie中。

后续用户的访问,也会自动将sessionID包含在请求头中,服务器判断sessionID是否存在,存在则表明用户已登录,即维持登录状态。而且整个过程是自动完成的,程序员只需要往session中存数据即可,使用起来十分方便。

同样,session优缺点如下:

优点:

  • 安全性高,相比较cookie将用户信息存储在客户端,session将用户信息存储在服务器端,因此安全性较高

  • 容量大,可以保存对象

缺点:

  • 占用服务器资源,由于session容量大,因此在高并发过程中十分占用服务器资源

  • 扩展性差

  • 跨域限制

    在分布式场景中,会有多台服务器,用户登录会在其中一台服务器中生成sessionID,而其他服务器没有sessionID,如果用户的下一次请求被分发到其他服务器中,则会误判用户没有登录。

    而且在目前后端分离的大环境中,会有多个前端(web,小程序,h5,安卓端,ios端),每个端都会有各自的域名端口,这个时候,前端请求后端会有跨域,跨域情况下,cookie默认是无法传递的,而sessionID本质上还是使用了cookie,也会被限制。因此需要前端单独去设置cookie允许跨域传递。

因此,在前后端的背景下,session也不再适用,于是token技术出现了。

token其实就是一个字符串,而JWT(Json Web Token)对token进行了一个规范。

Jwt由以点(.)分隔的三个部分组成,它们是:

  • Header

  • Payload

  • Signature

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

其形式为xxxx.xxxx.xxxx

并且可以将其解析为三个部分

Header 由Token的类型(JWT)和所使用的签名算法(HMAC SHA265)组成

Payload为有效负载,其中包含你要放的数据内容。

Signature,这部分是一个签名,是对Header和Payload数据签名,确保上面的内容不被篡改。

JWT的认证流程:

用户在登录成功后,服务器会生成一个JWT,然后将token响应到客户端,存放到request header中,之后的每次请求会带上token,服务器接收到token会解密,检查signature是否被篡改。

优点:

  • 适用于前后端分离场景和分布式项目

  • 解决了session和coookie面临的跨域和存储压力问题

缺点:

  • JWT默认不加密,因此会导致数据泄密,但可以将原始令牌加密,来传输私密信息。

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

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

相关文章

电商核心技术揭秘51:多渠道营销整合策略

相关系列文章 电商技术揭秘相关系列文章合集(1) 电商技术揭秘相关系列文章合集(2) 电商技术揭秘相关系列文章合集(3) 电商技术揭秘四十一:电商平台的营销系统浅析 电商技术揭秘四十二&#…

支付宝——图技术在金融反欺诈中的应用

目录 图在金融反欺诈中的应用背景 图驱动的感知研判决策处置 图在金融反欺诈中的演进 总结和展望

MySQL利用变量进行查询操作

在MySQL中,可以使用变量来存储查询结果,以便在随后的查询中使用。以下是一个示例,展示了如何使用变量进行查询操作: 创建一个示例表: CREATE TABLE example_table (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(…

OpenCV入门1:Python基础编程

目录 环境配置 Python基础语法 import 与 from...import If ... Else 语句 While 循环 For 循环 集合数据类型 列表 函数 类和对象 环境配置 详情请参考:Pycharm环境配置完整教程 Python基础语法 import 与 from...import 在 python 用 import 或者 f…

视频号音乐怎么下载

音乐,那个能够触动灵魂的艺术形式,穿越屏幕,流淌在视频号的每一个角落。然而,有时候,我们更希望能将那些动人心弦的旋律保存下来,让它们成为我们日常生活的一部分,陪伴我们度过每一个动人瞬间。…

DRM/RESP无法连接linux上redis的原因

问题一: redis.conf配置文件 进入到自己的redis软件目录 vim redis.conf 将bind 127.0.0.1 : 1 注释掉,改成bind 0.0.0.0,让远程所有ip都可以访问 将daemonize yes 守护进程,修改后可在后台运行 protected-mod…

NM2-WRDUW施耐德电动机保护器EOCR-NM2

EOCR智能电动机保护器原产地为韩国,隶属于施耐德(韩国)电气有限公司工厂。此公司早起源于韩国三和SAMWHA株式会社,是早研发电子式电动机保护器厂家,产品涵盖过电流继电器EOCR-SS,EOCR-SE2,EOCR-AR,欠电流继电器EUCR,数…

Spring AOP(2)

目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…

控制情绪是交易成功的根本?大错特错

布雷特斯坦伯格(Brett Steenbarger)是一位在美国享有盛誉的交易心理学专家,他曾在华尔街的多个顶尖培训中心担任交易员的心理指导。身为心理学教授兼高级交易员的布雷特在交易心理方面要比别人了解得多。而且小编觉得做一个成功的交易员只靠交…

笔试强训Day15 二分 图论

平方数 题目链接&#xff1a;平方数 (nowcoder.com) 思路&#xff1a;水题直接过。 AC code&#xff1a; #include<iostream> #include<cmath> using namespace std; int main() {long long int n; cin >> n;long long int a sqrtl(n);long long int b …

欢乐钓鱼大师游戏攻略,自动钓鱼!

在《欢乐钓鱼大师》的游戏中&#xff0c;每个玩家都沉浸在湖水的世界里&#xff0c;手持钓竿&#xff0c;期待着每次的收获。这不仅是一场简单的游戏&#xff0c;更是一次对技巧和耐心的考验。在这个充满乐趣和挑战的世界中&#xff0c;掌握正确的钓鱼技巧和选择合适的装备至关…

电子版图书制作,一键转换可仿真翻页的画册

在数字化浪潮的冲击下&#xff0c;传统纸质图书逐渐被电子版图书取而代之。电子版图书以其便携、环保、更新快速等特点&#xff0c;吸引了越来越多的读者。制作一款既具备电子图书的便捷性&#xff0c;又能仿真翻页的画册&#xff0c;成为当下图书出版行业的新趋势 1.要制作电子…

【QT教程】QT6模型-视图编程 QT模型视图编程

QT6模型-视图编程 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…

数据结构与算法学习笔记九-二叉树的链式存储表示法和实现(C语言)

目录 前言 1.二叉树的链式存储 2.二叉链表的表示和实现 1.定义 2.创建 4.中序遍历二叉树 5.后序遍历二叉树 6.后序遍历二叉树 7.完整代码 前言 这篇博客主要介绍二叉树的链式存储结构。 1.二叉树的链式存储 上篇文章中介绍了二叉树的顺序存储结构&#xff0c;在最坏的…

ORACLE RAC ASM磁盘组OFFLINE后的处理步骤

近期某客户的备机数据库集群ASM磁盘出现问题&#xff0c;数据库系统异常关闭。对问题进行排查&#xff0c;可以发现问题是存储磁盘出现了IO问题后OFFLINE&#xff0c;从而导致磁盘组也OFFLINE。由于系统是备机&#xff0c;发现时已经过去了较长时间&#xff0c;多余NORMAL冗余&…

【核武器】2024 年美国核武器-20240507

2024年5月7日,《原子科学家公报》发布了最新版的2024美国核武器手册 Hans M. Kristensen, Matt Korda, Eliana Johns, and Mackenzie Knight, United States nuclear weapons, 2024, Bulletin of the Atomic Scientists, 80:3, 182-208, DOI: https://doi.org/10.1080/00963…

有Python 2和3,但只给Python 2安装模块

系统中同时安装了Python 2和Python 3&#xff0c;并且你想要为Python 2的pip安装pytz&#xff0c;你需要确保使用Python 2的pip版本来执行安装命令。通常&#xff0c;Python 2的pip可以通过pip2命令来调用。以下是详细步骤&#xff1a; 首先&#xff0c;你需要确认系统中安装了…

Pandas数据取值与选择

文章目录 第1关&#xff1a;Series数据选择第2关&#xff1a;DataFrame数据选择方法 第1关&#xff1a;Series数据选择 编程要求 本关的编程任务是补全右侧上部代码编辑区内的相应代码&#xff0c;要求实现如下功能&#xff1a; 添加一行数据&#xff0c;时间戳2019-01-29值为…

【问题分析】锁屏界面调起google语音助手后壁纸不可见【Android 14】

1 问题描述 为系统和锁屏分别设置两张不同的壁纸&#xff0c;然后在锁屏界面长按Power调起google语音助手后&#xff0c;有时候会出现壁纸不可见的情况&#xff0c;如以下截图所示&#xff1a; 有的时候又是正常的&#xff0c;但显示的也是系统壁纸&#xff0c;并非是锁屏壁纸…

Android system property运作流程源码分析

一.序 前文分析了build.prop这个系统属性文件的生成&#xff0c;每个属性都有一个名称和值&#xff0c;他们都是字符串格式。属性被大量使用在Android系统中&#xff0c;用来记录系统设置或进程之间的信息交换。属性是在整个系统中全局可见的。每个进程可以get/set属性&#x…