Cookie、Session、Token三者的区别

news/2024/10/23 23:27:28/文章来源:https://www.cnblogs.com/IT-Evan/p/18487814

在数字世界的茫茫人海中,每一次点击、每一次登录,都伴随着身份认证与数据安全的较量。今天咱要来一场惊心动魄的技术探秘之旅,今天我要带你深入探索Web开发中那三个绕不开的名字——Cookie、Session、Token,它们不仅仅是技术名词,更是构建安全、高效用户交互的基石,看看它们在接口鉴权、用户登录等场景中究竟有着怎样的神奇魔力!

 

想象一下,你正在构建一个庞大而精彩的 Java 应用世界,就像一个充满奇幻色彩的王国。在这个王国里,用户的身份认证和权限管理就如同守护王国的坚固城墙。而 Cookie、Session 和 Token 就是三把关键的钥匙,它们各自有着独特的能力,决定着谁能进入这个王国,以及在王国里能做什么。

 

首先,让我们来认识一下 Cookie。Cookie 就像是一个小巧的魔法口袋,它可以被服务器放在用户的浏览器里。当用户再次访问同一个网站时,这个魔法口袋就会被带上,让服务器能够认出这个用户。比如说,当你登录一个购物网站后,服务器可能会在你的浏览器里放一个 Cookie,里面记录着你的登录状态。下次你再打开这个网站时,浏览器会自动把这个 Cookie 发送给服务器,服务器一看,就知道是你来了,然后就可以给你展示个性化的页面。

 

实现步骤呢,也很简单。服务器在用户登录成功后,设置一个 Cookie,包含一些关键信息,比如用户 ID。然后,每次用户请求页面时,浏览器会自动把这个 Cookie 发送给服务器。服务器读取 Cookie 中的信息,就可以判断用户的身份。

接着,我们来看看 Session。Session 就像是一个魔法宝箱,它存在于服务器端。当用户登录成功后,服务器会为这个用户创建一个独特的 Session,并在里面存放用户的相关信息。这个 Session 有一个唯一的标识符,就像一把钥匙。服务器把这个标识符发送给用户的浏览器,通常是放在 Cookie 里或者作为 URL 的一部分。当用户再次请求时,带着这个标识符,服务器就能找到对应的 Session,从而知道用户是谁。

 

例如,在一个在线论坛中,用户登录后,服务器创建一个 Session,记录用户的用户名、权限等信息。用户在浏览不同的页面时,服务器通过 Session 标识符找到对应的 Session,确保用户能够进行相应的操作。

 

✨最后,登场的是 Token。Token 就像是一个神秘的魔法令牌,它是由服务器生成的一串字符,包含了用户的身份信息。与 Cookie 和 Session 不同的是,Token 可以在不同的系统之间传递,非常灵活。比如,当你使用一个第三方登录服务登录某个应用时,服务器会给你一个 Token,这个 Token 可以在不同的服务器之间传递,让其他服务器也能识别你的身份。️

 

实现 Token 的方式通常是在用户登录成功后,服务器根据用户的信息生成一个 Token,然后把这个 Token 返回给客户端。客户端可以把 Token 存储在本地,比如浏览器的 localStorage 中。每次请求时,把 Token 放在请求头中发送给服务器。服务器读取 Token 中的信息,进行身份验证。

那么,在接口鉴权和用户登录场景中,它们又各自有着怎样的表现呢?在用户登录时,Cookie 和 Session 可以快速地在同一个服务器上进行身份验证。但是,如果涉及到多个服务器或者分布式系统,Token 就更加合适,因为它可以在不同的服务器之间传递,实现统一的身份认证。而在接口鉴权方面,Token 可以通过加密和签名等方式,确保请求的安全性和合法性。Cookie 和 Session 也可以通过一些安全措施来保护用户信息,但相对来说,Token 在安全性方面更有优势。

怎么样,小伙伴们?现在是不是对 Cookie、Session 和 Token 有了更深刻的理解呢?在你的 Java 开发之旅中,根据不同的场景选择合适的身份认证方式,就像选择一把合适的钥匙,打开成功的大门!

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

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

相关文章

20222417 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实践内容 1.1实验目的 (1)正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧 正确使用msf编码器,使用msfvenom生成如jar之类的其他文件 veil,加壳工具 使用C + shellcode编程 (2)通过组合应用各种技术实现恶意代码免杀 如果成功实现了免杀的,简单语…

人生路manman,Man游常相伴——软工实践第一次团队作业

作业所属课程 班级的链接作业要求 作业要求的链接作业目标 你理解的作业目标具体内容团队名称 iman团队成员 102202146 - 蓝敏龙, 102201225 - 陈碧煌, 102202105 - 王梓铭, 102202124 - 阿依娜孜, 102202135 - 施宇翔, 102202134 - 承宇豪, 102202117 - 杨邑豪, 102202122 - 张…

java学习10.23

继续写这个javaweb项目,实现增删和之间的页面跳转

2024秋软工实践 福气满满团队展示与选题报告

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024作业要求 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13281作业的目标 运用LMM大语言模型接口创建一款基于场景的AI对话软件,为传统软件赋予全新功能团队名称 福气满满团队成员学号-名字 052203132童…

《操作系统真象还原》内核内存分布与加载

操作系统内核加载流程图 %%{init:{theme:default, themeVariables:{fontSize:1px}}}%% graph TBA(mbr.s 0xc700开始) --> rd_disk_m_16(mbr.s <br /> rd_disk_m_16) A --> C(loader.s <br> jmp LOADER_BASE_ADDR + 0x300) --> loader_start(loader.s…

20222318 2024-2025-1 《网络与系统攻防技术》实验二实验报告

1.实验内容 (一)本周课程内容 (1)深入理解后门概念及其实际案例,明晰后门对系统安全构成的潜在威胁。 (2)普及后门技术知识,涵盖各类进程隐藏技巧,并熟悉netcat、meterpreter、veil等常见工具的应用。 (3)进一步学习了shellcode注入的逻辑原理及其在不同场景下的应用…

IDEA 类和方法的注释

IDEA 类和方法的注释 一、设置方法的注释 (1) 打开file->setting->Editor->LiveTemplates点击右上面那个+号,选择Template Group双击,然后弹出一个窗口,添加命名为KeyBoard点击OK完成,如下图1所示:图1 (2) file->setting->Editor->LiveTemplates这个…

实验2 类和对象

任务1 t.h1 #pragma once2 3 #include <string>4 5 // 类T: 声明6 class T {7 // 对象属性、方法8 public:9 T(int x = 0, int y = 0); // 普通构造函数 10 T(const T &t); // 复制构造函数 11 T(T &&t); // 移动构造函数 12 ~T();…

提权 | Windows系统

提权篇:Windows系统常见提权姿势。目录cmd提权meterpreter提权getsystemsteal_tokenmigrate令牌窃取(MS16-075)烂土豆提权步骤烂土豆提权原理sc命令提权抓本地密码提权其他工具pr工具内核提权WindowsVulScan cmd提权 前言:我们getshell一个用windows部署的网站后,通过蚁剑或…

for 循环()简单到高阶

for循环的初始意义是遍历一串具有相同特性的值 1、遍历数组,根据索引去求值点击查看代码 public class ForDemo1 {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7};for (int i = 0; i < arr.length; i++) {System.out.println("arr["+i+&q…

08.Sleuth(Micrometer)+ZipKin分布式链路追逐

1.Sleuth进入维护模式替代方案 -> Micrometer Tracing 2.分布式链路追踪概述 2.1 出现背景 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协调产生最后的结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环…

sream

构建 arrays.stream(数组) 根据数组构建 collection.stream 根据集合构建 stream.of 根据对象创建 生成 Instream.range(a,b) 合并 stream.concat(流1,流2)