Cookie,Seesion和Token区别及用途

server/2024/12/18 11:13:11/

Cookie,Seesion和Token区别及用途

image-20241216163229547

简介

Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点。

Cookie

定义:

  • HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息):每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。
  • cookie 存储在客户端:cookie 是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
  • cookie 是不可跨域的:每个 cookie 都会绑定单一的域名,无法在别的域名下获取使用,一级域名和二级域名之间是允许共享使用的(靠的是 domain)。

使用过程:

image-20241216163732161

image-20241216164101074

Seesion

定义:

  • session 是另一种记录服务器和客户端会话状态的机制
  • session 是基于 cookie 实现的,session 存储在服务器端,sessionId 会被存储到客户端的cookie 中

使用过程:

image-20241216164427290

session 认证流程:

  • 用户第一次请求服务器的时候,服务器根据用户提交的相关信息,创建对应的 Session
  • 请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器
  • 浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入到 Cookie 中,同时 Cookie 记录此 SessionID 属于哪个域名
  • 当用户第二次访问服务器的时候,请求会自动判断此域名下是否存在 Cookie 信息,如果存在自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。

image-20241216164852355

Token

使用流程(JWT):

image-20241216165331779

JWT 认证流程:

  • 前端发送登录请求,后端进行认证,认证成功后,会创建一个JWT的字符串,包含三段信息。
  • 然后把创建好的JWT返回到前端,前端拿到JWT的token,对token分割拿到第二段,第二段是数据的载体,通过base64的方式解码即可。
  • 登录成功后,后续的请求,只需要在请求头中设置一个跟后端约定的一个属性Authorization:token,然后再把响应的JWT Token传入到后端,后端拿到Token进行解密,验证signature,检验成功信息没有被篡改,即可放行,正常响应。

JWT不需要前后端的存储,只是一个加密的字符串,对于集群和前后端分离的架构来说是非常方便的。


http://www.ppmy.cn/server/151153.html

相关文章

爬虫运行中遇到反爬虫策略怎么办

在现代网络环境中,爬虫技术与反爬虫策略之间的博弈愈发激烈。为了应对网站的反爬虫措施,爬虫开发者需要采取一系列策略来确保数据抓取的成功率。本文将详细介绍几种常见的反爬虫策略及其应对方法,并提供相应的Java代码示例。 1. 用户代理&am…

(笔记)lib:no such lib的另一种错误可能:/etc/ld.so.conf没增加

[TOC]((笔记)lib:no such lib的另一种错误可能:/etc/ld.so.conf没增加) 0.需求说明 通过cmakelist去find一个库时,可能导致报错,例如”libsgm.so cannot open“。但明明已经make install了,所以还有一种可能: 共享库…

如何通过变更让 PostgreSQL 翻车

在开发应用程序和维护其后台数据库集群的过程中,我们经常会遇到实践与理论、开发环境与生产环境之间的差异。其中一个典型的例子就是变更数据库中的列类型。 对于在 PostgreSQL(及其他符合 SQL 标准的系统)中变更列类型的常规操作&#xff0…

leetcode--字符串

目录 344.反转字符串 541.反转字符串II 卡码网:替换数字 151.反转字符串中的单词 卡码网:右旋字符串 28.找出字符串中第一个匹配项的下标 459.重复的子字符串 344.反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以…

P8772 [蓝桥杯 2022 省 A] 求和

题目描述: 解题思路: 首先这题我们可以直接用两个for循环嵌套来控制两个变量来求值,但是这样做时间复杂度高。这里我们用到了一个前缀和差的方法。通过for循环变量第一个变量,用和差的方法的到第二个量,这样就只用了一…

网易游戏分享游戏场景中MongoDB运行和分析实践

在游戏行业中,数据库的稳定和性能直接影响了游戏质量和用户满意度。在竞争激烈的游戏市场中,一个优秀的数据库产品无疑能为游戏的开发和后期的运营奠定良好的基础。伴随着MongoDB在不同类型游戏场景中的应用越来越广泛,许多知名的游戏公司都在…

7.Linux - 安装MySQL、Tomcat、Nginx、RabbitMQ、Redis

Linux - 安装MySQL 文章目录 Linux - 安装MySQL一、MySQL 5.71.1 安装1.2 配置 二、MySQL 8.x2.1 安装2.2 配置 三、Tomcat安装3.1 安装 JDK3.2 Tomcat(整的不行) 四、Nginx4.1 安装 五、RabbitMQ5.1 安装 六、Redis6.1 安装 一、MySQL 5.7 1.1 安装 我…

Linux练习

1、找到 useradd 命令,将该命令文件移动到 /tmp 目录中,并重命名为 useradd_backup which useradd cp /usr/sbin/useradd /tmp/useradd_backup 2、使用 vim 等相关命令创建用户 usertest, 该用户使用 /usertest 目录作为家目录 [rootlocalhost ~]# mkd…