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默认不加密,因此会导致数据泄密,但可以将原始令牌加密,来传输私密信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维实施工程师之Linux服务器全套教程

一、Linux目录结构 1.1 基本介绍 Linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。 在 Linux 世界里,一切皆文件(即使是一个硬件设备,也是使用文本来标…

暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法

暗区突围是一款高拟真硬核射击手游,打造了全新的沉浸式暗区战局体验,发行商是腾讯公司。这个游戏名词虽然看起来有些陌生,但其本身的玩法内核毫无疑问的是,这款游戏在画面质量和枪械操作方面,都是手游市场上同类游戏中…

文字转语音粤语怎么转换?6个软件教你快速进行文字转换语音

文字转语音粤语怎么转换?6个软件教你快速进行文字转换语音 当需要将文字转换为粤语语音时,可以使用多种工具和服务,这些工具可以帮助您快速而准确地实现这一目标。以下是六个非国内的语音转换软件,它们可以帮助您将文字转换为粤语…

【微磁学】对于现阶段微磁学仿真发展的思考1-理论篇

系列文章目录 对于现阶段微磁学仿真发展的思考1-理论篇 对于现阶段微磁学仿真发展的思考2-工具篇 文章目录 系列文章目录前言一、微磁学的数学区二、微磁学的物理区三、微磁学仿真现存的一些问题四、微磁学代码区:上手操作,理解更深入栗子1: 能量最小化…

人脸美妆SDK解决方案,自研人脸美妆方案

美妆已经成为视频内容中不可或缺的一部分。从拍摄到编辑,再到直播,美妆效果都能为视频内容增添魅力,吸引更多观众的眼球。为了满足企业对于高质量美妆效果的需求,美摄科技凭借多年的技术积累和创新精神,推出了全新的人…

Jmeter 中 CSV 如何参数化测试数据并实现自动断言

当我们使用Jmeter工具进行接口测试,可利用CSV Data Set Config配置元件,对测试数据进行参数化,循环读取csv文档中每一行测试用例数据,来实现接口自动化。此种情况下,很多测试工程师只会人工地查看响应结果来判断用例是…

局域网监控软件能干什么|有哪些好用的局域网监控软件

企业局域网已成为日常工作中不可或缺的一部分。 然而,网络环境的复杂性和员工上网行为的多样性,使得企业面临着诸多安全风险和管理挑战。 因此,高效局域网监控上网记录监测成为了企业保障信息安全和提升工作效率的重要手段。 高效局域网监控…

linux - 主次设备号自动申请

alloc_chrdev_region 原型如下,该函数向内核申请一个空闲的主设备号。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四个参数是我们使用cat /proc/devices 看到的名称 /*** alloc_chrdev_region() - register a…

智慧交通系统:未来出行,从这里开始

随着城市化进程的加快,交通拥堵、事故频发、停车难等问题日益凸显,传统交通管理模式已难以满足现代社会的需求。智慧交通系统作为解决这些问题的关键,通过集成创新技术,实现交通管理的智能化、信息化,提高交通系统的运…

TC6291C 是一款电流模式升压型DC-DC转换器芯片

一般概述 TC6291C是一款电流模式升压型DC-DC转换器。其脉宽调制电路,内置0.2Q功率场效应管使这个调节器具有高功率效率。内部补偿网络也减少了多达6个的外部元件。误差信号放大器的同相输入端连接到0.6V精密基准电压,内部软启动功能可以减小瞬间突…

一文带你了解 Oracle 23ai 新特性 Vector 的基础用法

Oracle Database 23ai 来了,虽然目前只是云上可商用,但是 OP 有 FREE 版本可以进行开发。 本文将介绍 Oracle 23ai 的新特性之一: AI 向量搜索,的部分内容。 向量数据类型 23ai 新增向量数据类型,可以用于表示一系列的…

【PyTorch单点知识】深入理解与应用转置卷积ConvTranspose2d模块

文章目录 0. 前言1. 转置卷积概述2. nn.ConvTranspose2d 模块详解2.1 主要参数2.2 属性与方法 3. 计算过程(重点)3.1 基本过程3.2 调整stride3.3 调整dilation3.4 调整padding3.5 调整output_padding 4. 应用实例5. 总结 0. 前言 按照国际惯例&#xff0…

3399 ubuntu系统启动后,gpio已被初始化问题查找

问题描述: 使用cat /sys/kernel/debug/gpio后发现,gpio-55已经被设备树初始化了。 如果要找到这个引脚的设置代码,需要一点点查找。这里记录了比较快速的办法 gpio引脚变换 gpio-55需要转换成对应的引脚编号 根据https://blog.csdn.net/ch122633/article/details/120233…

C语言实现面向对象—以LED驱动为例

点亮一个LED 常见的LED代码 分层分离思想 面向对象的LED驱动 LED左边高电平。 当LED右边为低电平时,LED有电流通过,LED亮。反之,LED灭 GPIO功能描述: 点亮LED的步骤及代码: 开启GPIO的时钟 配置GPIO为输出模式 …

前端数据可视化基础(折线图)

目录 前言: 画布: 折线图 (Line Chart): 前言: 前端中的数据可视化是指将大量数据以图形或图像的形式在前端页面上展示出来,以便用户能够更直观地理解和分析这些数据。数据可视化是一种强大的工具,它利用了人类视觉…

城市二手房数据分析与房价预测

实现功能 数据分析 二手房价格-时间分析 二手房数量-时间分析 二手房分布-区域分析 二手房户型分析 二手房朝向分析 二手房价格-区域分析 二手房热词词云 房价预测 采用合适的算法模型,对模型进行评估。通过输入影响因素输出预测价格。 采用技术与框架 M…

在Unity中实现分页数据显示和分页控制

参考:用两种简单的方式实现unity的分页效果 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Rendering.VirtualTexturing; using UnityEngine.TerrainUtils;public class PageControll…

五一反向旅游,景区“AI+视频监控”将持续助力旅游业发展

一、建设背景 每年五一劳动节出去旅游都是人挤人状态,这导致景区的体验感极差。今年“五一反向旅游”的话题冲上了热搜,好多人选择了五一之后再出去旅游,避开拥挤的人群,这个时候景区的监管力度和感知能力就更要跟上去&#xff0…

Gradio之blocks灵活搭建页面

这里写目录标题 搭建一个UI界面搭建上半部分的框架比例调节以及其他效果搭建下半部分左边部分搭建下半部分右边部分拓展-CSS的应用 使用标签搭建第二个页面示例 补充AccordionGroup() 搭建一个UI界面 搭建上半部分的框架 如下图,我们想要基本还原下图右边的UI界面…

AI去衣技术在动画制作中的应用

随着科技的发展,人工智能(AI)已经在各个领域中发挥了重要作用,其中包括动画制作。在动画制作中,AI去衣技术是一个重要的工具,它可以帮助动画师们更加高效地完成工作。 AI去衣技术是一种基于人工智能的图像…