Cookie、Session、Token

Cookie

什么是Cookie

Cookie是服务器发送给客户端并保存在客户端本地的一小块数据,能够在下次发送请求时携带Cookie。

Cookie是保存在客户端的,按存储位置分类,可以分为内存Cookie和硬盘Cookie。

Cookie的应用

Cookie主要用于几个方面:

  • 会话状态保持,比如记录用户登录状态、或者其他记录的信息

  • 个性化设置,比如保存用户自定义设置

  • 游览器行为跟踪,比如跟踪分析用户行为

服务端创建Cookie

当服务器收到Http请求时,可以在响应头中添加 Set-Cookie 字段,游览器收到响应后会把这个字段里的值保存在Cookie中,每次请求都会在请求头中携带 Cookie 字段。

Cookie也有一些属性可以设置,比如过期时间、作用域

  • Expires:过期时间,是绝对时间 Max-Age:相对时间,过期时间为创建时间+相对时间

  • Domain、Path:指定域名和路径,游览器在发送请求前会从URI中提取host和path部分,对比Cookie中的属性,如果满足条件才携带Cookie。所以能够实现不同域名、不同路径携带不同的Cookie

  • HttpOnly:表示此Cookie只允许通过HTTP协议传输

存在的问题

  • 跨站请求伪造CSRF

Session

Session是存储在服务端的,包括Session-ID分配、会话信息存储、会话检索都由服务器完成。

客户端第一次请求session对象时,服务器会为客户端创建一个session,并通过特殊算法算出一个session-id用来标识session。服务端会根据客户端携带的session-id检索对应的session

session的实现有两种方式:Cookie中设置session-id、在Url携带session-id

存在的问题

  • 服务端存储session,当用户数量海量时,会有存储压力

  • 分布式系统的session共享

Token

JWT和Token详细介绍——CSDN

Token(令牌)是由服务器颁发给客户端的,用于用户认证的令牌。

客户端收到服务端返回的Token,可以保存在Cookie,也可以存储在localStorage里。

JWT(Json Web Token)是Token的一种实现方式,它将用户信息保存在Token中,通过服务器的密钥对token进行加密计算,与token中的签名比较是否一致,来验证用户身份。

JWT

JWT由三部分组成:

  • header头部:包括type和令牌签名的算法alg。使用base64进行编码

  • payload负载:负载中包含所需要的用户信息,比如用户id、用户角色,过期时间,可以自定义

  • signature签名:对头部和负载的签名(签名指通过header指定的算法 和 密钥对前两部分进行加密计算)

认证流程:

  • 服务端收到客户端的JWT令牌后,取出头部和负载,使用密钥进行加密计算

  • 比较计算的结果和JWT中的签名,如果一致,则认证成功;如果不一致,则说明JWT被篡改

  • 如果没有被篡改,再进行其他验证,比如是否过期,用户是否具有权限

优点

  • 服务端不用保存用户状态,适合分布式

  • 简洁:可以通过url、post参数、请求头传递,数据量小,传输也比较快

  • 负载中可以保存用户所需要的信息,避免多次查询数据库

缺点

  • 无法作废以颁发的令牌,只能等过期(除非再设置令牌黑名单)

  • 不易应对数据过期,比如令牌颁发后用户信息发生改变,令牌中的负载还是旧数据

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

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

相关文章

vite的使用

vite说是面向未来的框架,支持esm模块化,虽然可以引入require插件来支持,commomjs不过介意别用,因为老旧的包和node版本问题也很多,对应升级的生态nuxt3和新的需要更新node版本18 20, 通常搭建vite就是引入l…

ROS第一个程序——helloworld

目录 一、工作空间的创建 1.创建工作空间并初始化 2.进入 src 创建 ros 包并添加依赖 二、C实现helloworld C源码实现 编辑 ros 包下的 Cmakelist.txt文件 进入工作空间目录并编译 执行 三、python实现helloworld 进入 ros 包添加 scripts 目录并编辑 python 文件 …

【源码篇】基于SpringBoot+thymeleaf实现的蓝天幼儿园管理系统

基于SpringBootthymeleaf实现的蓝天幼儿园管理系统 文章目录 系统说明技术选型成果展示账号地址及其他说明 系统说明 基于SpringBootthymeleaf实现的蓝天幼儿园管理系统是为幼儿园提供的一套管理平台,可以提高幼儿园信息管理的准确性,系统将信息准确无误…

883重要知识点

(1)程序结构分三种:顺序结构,选择结构,循环结构。 (2)该程序都要从main()开始,然后从最上面往下。 (3)计算机的数据在电脑中保存以二…

vue+ts实现离线高德地图 内网离线高德地图

1、下载瓦片 我是用最简单的软件下载——MapDownloader 链接:https://pan.baidu.com/s/1Hz__HcA5QhtGmjLNezC_pQ 提取码:6lek 来源:https://blog.csdn.net/fuhanghang/article/details/131330034 2、部署私有化瓦片资源 这里也是用最简单的…

智能变压器监控系统

智能变压器监控系统是一种先进的物联网技术和智能设备,能够实现对变压器的实时监测和管理,提高变压器的运行效率和可靠性,为用户提供及时、准确的变压器运行状态信息和故障预警。 力安科技A30变压器云控终端是一款集变压器温控仪、变压器运行…

【每日一题】从二叉搜索树到更大和树

文章目录 Tag题目来源题目解读解题思路方法一:中序遍历的反序方法二:后缀数组 写在最后 Tag 【中序遍历】【二叉树】【2023-12-04】 题目来源 1038. 从二叉搜索树到更大和树 题目解读 在二叉搜索树中,将每一个节点的值替换成树中大于等于该…

百度查询界面自定义

文章目录 起因步骤 纯个人纪录 参考以下师傅链接 爱吃猫的鱼儿-浏览器设置夜间模式以及百度搜索结果单列居中 起因 发现百度查询结果都在左边,想着能不能居中,发现已经有前辈写了插件,遂安装使用,看下效果 步骤 安装插件暴力猴…

计算机基础知识63

Django的条件查询&#xff1a;查询函数 exclude exclude&#xff1a;返回不满足条件的数据 res Author.objects.exclude(pk1) print(res) # <QuerySet [<Author: Author object (2)>, <Author: Author object (3)>]> order_by 1、按照 id 升序排序 res …

Android启动系列之进程杀手--lmkd

本文概要 这是Android系统启动的第三篇文章&#xff0c;本文以自述的方式来讲解lmkd进程&#xff0c;通过本文您将了解到lmkd进程在安卓系统中存在的意义&#xff0c;以及它是如何杀进程的。&#xff08;文中的代码是基于android13&#xff09; 我是谁 init&#xff1a;“大…

LeetCode 232.用栈实现队列

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返回…

c题目14:写成一个函数,对数组进行排序

每日小语 一个人倘若需要从思想中得到快乐&#xff0c;那么他的第一个欲望就是学习。——王小波 自己思考 这不前几天刚搞的东西吗&#xff0c;就写成一个函数&#xff0c;这个有什么难的吗&#xff1f;我有时候那个分别心特重啊&#xff0c;真就别人拿到个啥好的比杀了我还难…

贸易公司ERP用什么软件好

不同行业的贸易公司有不同的业务结构和管理模式&#xff0c;日常经营管理过程中遇到的难点呈现多样化&#xff0c;而很多贸易公司在仓库、财务、销售、采购、订单、客户等业务一体化和部门协同效率等方面还有很多提升空间。 有些贸易公司涉及多仓库、多门店、多税制、多汇率、…

VUE2+THREE.JS 设定巡航行动轨迹

设定巡航行动轨迹 引入three.path初始化坐标点animate 执行行动轨迹动画参考博客 我们写3D时&#xff0c;常常会有按照一定轨迹去浏览模型&#xff0c; 所以,我们要先确认行动轨迹&#xff0c;渲染出行动轨迹以后&#xff0c;再让人物按照行动轨迹去移动 引入three.path cnpm …

性价比开放式蓝牙耳机推荐哪款、性价比最高的开放式耳机

传统的耳机设计虽然便携&#xff0c;但却可能给一些需要长时间佩戴的用户带来不适。长时间封闭在耳机内可能导致耳朵不透气&#xff0c;甚至引起疼痛。这就是为什么近年来开放式耳机越来越受欢迎的原因。这种耳机设计无需直接插入耳道&#xff0c;采用挂耳的佩戴方式&#xff0…

广州数字孪生赋能工业制造,加速推进制造业数字化转型

广州数字孪生赋能工业制造&#xff0c;加速推进制造业数字化转型。数字孪生系统基于历史数据、实时数据&#xff0c;采用人工智能、大数据分析等新一代信息技术对物理实体的组成、特征、功能和性能进行数字化定义和建模。通过构建在信息世界对物理实体的等价映射&#xff0c;对…

React 笔记 jsx

严格约定&#xff1a;React 组件必须以大写字母开头&#xff0c;而 HTML 标签则必须是小写字母。 React JSX JSX 是由 React 推广的 JavaScript 语法扩展。 用于表达组件的 特殊语法的 js 函数 要求标签必须闭合&#xff1b;返回的组件必须包裹在一个父标签内&#xff1b; …

【Linux】echo命令使用

​echo命令 功能是在显示器上显示一段文字&#xff0c;一般起到一个提示的作用。此外&#xff0c;也可以直接在文件中写入要写的内容。也可以用于脚本编程时显示某一个变量的值&#xff0c;或者直接输出指定的字符串。 ​ 著者 由布莱恩福克斯和切特拉米撰写。 语法 echo […

UOS打印任务监控

UOS系统下如何对一个打印任务进行监控呢? 首先,UOS系统是支持这个功能。比如说我们打印一个任务后,UOS自带的打印管理器是能知道打印任务的状态的: 经过研究,最终发现了他的监控原理。 还得是DBus 没错,还是得通过DBus来实现打印任务监控。 话不多说,直接上代码: …

Linux 文件查找

1 文件查找 在文件系统上查找符合条件的文件 文件查找&#xff1a;locate&#xff0c;find 1.1 locate 工作特点&#xff1a; 格式&#xff1a; Usage: locate [OPTION]... [PATTERN]...常用选项&#xff1a; -i &#xff1a;不区分大小写的搜索 -n N &#xff1a;只列举前…