【知识点随笔分析 | 第七篇】什么是Cookie、Session、Token

news2024/11/19 13:27:09

前言:

        当今互联网世界的发展让网站和应用程序扮演着重要的角色。为了实现用户身份验证、数据传输和用户状态管理等功能,开发人员常常使用一些关键技术来确保安全性和持久性。而在这些技术中,CookieSessionToken是最常见和广泛使用的三种机制。

目录

前言:

什么是COOKIE:

什么是Session

Session的优点:

什么是Token:

Tooken与Session的区别:

Token的代码实现(Java):

Cookie 与 Session 与Token 概括:

Cookie:

Session:

Token:

总结: 


 

        了解HTTP的同学应该都知道,HTTP是无状态的,这也就意味着你和服务器的对话是会随着关闭相应的网页而终止,而服务器在下一次访问中是无法判断你之前是否有访问过本网页从而进行各种个性化设置的。而在我们实际的体验中,我们可以发现之前登录过的网页再次点击还是登录状态,设置过个性化的网页还是保存着个性化,这就是本文我们要介绍的CookieSessionToken发挥的作用

HTTP介绍:HTTP介绍:一文了解什么是HTTP_我是一盘牛肉的博客-CSDN博客

什么是COOKIE:

        Cookie是一种在互联网应用中存储在用户计算机上的小型文本文件。当用户访问网站时,服务器会将包含一些关键信息的Cookie发送到用户的浏览器,然后浏览器将这些Cookie保存起来。每当用户再次访问该网站时,浏览器会将相应的Cookie发送回服务器,并将存储在Cookie中的信息提供给服务器使用。

Cookie主要用于在用户网站服务器之间传递数据,并实现一些重要的功能。它可以存储和传递用户的状态信息、个人偏好设置、购物车内容、登录凭证等。通过使用Cookie,网站能够提供个性化的服务和用户体验。例如,在在线购物网站上,Cookie可以记录用户的购物车内容,使用户能够在不同页面间保持一致的购物车状态。

Cookie还可以用于用户追踪和行为分析。通过在用户浏览器中存储唯一标识符,网站可以跟踪用户的访问行为,例如点击流、页面浏览量等。这些数据可以帮助网站了解用户行为模式,从而进行精准的广告投放和用户个性化推荐。

需要注意的是,Cookie是存储在用户浏览器中的文本文件,并不具有执行代码或程序的能力。它只是作为数据存储和传递的一种机制。另外,由于Cookie存储在用户的计算机上,用户可以在浏览器设置中选择启用或禁用Cookie,也可以手动清除保存的Cookie。

总体而言,Cookie在互联网应用中扮演了重要的角色,以实现用户状态管理、数据传输和个性化服务等功能。通过Cookie,网站可以在用户访问过程中保持持久性信息,并根据用户的需求提供更好的的用户体验。

而Cookie由于是存放在本地的,因此会存在安全性问题,如果Cookie中存放了重要信息被泄露,那么这将是一个很大的问题

 

基于Cookie的安全性问题,我们又创造了另外一种机制:Session

什么是Session

        Session是一种在服务器端存储用户会话数据的机制。在Web应用程序中,每当用户与服务器进行交互时,都会创建一个会话,该会话在用户与服务器之间保持活动状态。会话数据包含有关用户的状态和信息,如登录凭证、用户首选项、购物车内容等。

当用户首次访问网站时,服务器会为该用户创建一个唯一的会话ID(Session ID),并将会话数据存储在服务器上。然后,服务器将这个会话ID(Session ID)发送到用户的浏览器中,通常是通过Cookie进行传输。浏览器会将这个会话ID(Session ID)保存在Cookie中,并在后续的请求中将其发送回服务器,以维持会话状态。

通过使用会话,网站可以在不同请求之间保持用户的状态和偏好设置。服务器可以根据会话ID来获取相应的会话数据,并对用户进行身份验证、个性化处理等。会话数据保存在服务器端,用户无法直接访问或修改,因此相对来说更加安全。 

Session的优点:

Session机制具有许多优点,使其成为在Web应用程序中管理用户状态和数据的常用机制:

  1. 安全性:相比于Cookie,Session的数据存储在服务器端,用户无法直接访问或修改会话数据。这样可以提高数据的安全性,减少恶意攻击和信息泄露的风险。

  2. 大容量:Session对存储数据的容量限制较小,可以存储复杂、大型的数据对象,如用户信息、购物车内容等。这使得Session比Cookie更适合于存储较大量的用户数据。

  3. 无状态性:相对于Cookie机制,Session是无状态的。服务器不需要每次请求时都检查和处理Cookie,而是依靠会话ID来获取对应的会话数据。这可以减轻服务器的负担,提高应用程序的性能和并发处理能力。

  4. 可扩展性:使用Session可以轻松扩展应用程序的功能和用户体验。由于会话数据存储在服务器端,添加新功能只需要修改服务器端代码,而不需要修改用户端的Cookie或其他数据。这使得应用程序的开发和维护更加灵活和可扩展。

  5. 简便性:对于应用程序开发人员来说,使用Session机制相对简单。服务器负责管理和维护会话数据,而无需开发人员手动处理Cookie和数据传输。这简化了开发过程,并提高了开发效率。

  6. 用户体验:通过使用Session,应用程序可以在用户不同请求之间保持一致的状态和信息,提供连贯和个性化的用户体验。用户可以在多个页面之间无缝切换,并在整个会话过程中保持数据的一致性和更新。

综上所述,Session机制在Web应用程序中具有许多优点。它提供了更高的安全性和可扩展性,能够存储大容量的数据,简化了开发过程,并提供了良好的用户体验。但同时也需要注意会话管理、会话数据的存储和清理等方面的考虑,以确保会话机制的有效和可靠。

在这里我们小结一下Cookie与Session的区别:

在之前我们使用Cookie直接存储会话数据,并把Cookie保存在客户端,而这存在安全漏洞,因此我们创造了Session,核心思想是把会话数据保存到服务器,并且生成一个与这个会话数据对应的会话凭证(Session ID),此后Cooike就不再存储会话数据而是存储Session ID,这样就大大降低了由于Cookie泄露而导致的安全性问题,并且Session ID是带有服务器签名的,也就是说黑客无法通过篡改Session ID的方式来进行非法行为

而这种基于Cookie的Session随着时间的推移也出现了问题,如果同一时间内访问服务器的主机过多,那么服务器就要给每一个主机都分配一个Session ID,这就会狠狠的拷打服务器的处理能力,如果是把Session存储到数据库中,如果数据库崩溃,那么就是灾难性的后果。并且如果我们的网站有多台服务器,又要面临着分配Session ID到多台服务器的问题。随着这些问题的爆发,三代目终于出现了:Token

 

什么是Token:

        Token是一种在网络通信中用于身份验证和授权的令牌。它是一串由服务器颁发的字符串,作为客户端证明身份或获取特定资源的凭证。Token通常被包含在请求的头部、请求参数或Cookie中,以便服务器能够验证请求的合法性并提供相应的访问权限。

Token在身份验证方面有不同的应用场景和实现方式。以下是常见的几种类型:

  1. 访问令牌(Access Token):在OAuth 2.0等身份验证协议中常见的一种Token类型。当用户向服务器发起认证请求并通过验证后,服务器会颁发一个访问令牌给客户端应用程序。客户端在后续的请求中将访问令牌作为身份凭证发送到服务器,服务器根据令牌来验证用户的访问权限。访问令牌通常有一定的有效期,过期后需要刷新或重新获取。

  2. JSON Web Token(JWT):一种基于JSON的开放标准(RFC 7519),用于在各方之间安全地传输信息。JWT由三个部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。JWT的优点之一是可以将用户的授权信息和其他相关信息直接存储在Token中,减轻了服务器端的数据存储开销。

  3. 去中心化令牌(Decentralized Token):在区块链和加密货币领域,去中心化令牌被用作数字资产的代表和交换媒介。代表性的去中心化令牌包括以太坊(Ethereum)上的ERC-20令牌和非同质化代币(NFT)。这些令牌使用区块链技术确保了其不可篡改性和防伪造能力,并允许用户直接拥有并交易令牌。

Token的使用可以有效地实现身份验证和授权机制,在跨域应用和分布式系统中具有广泛应用。它提供了一种无状态、灵活且安全的身份验证机制,为应用程序和API提供了一种可靠的访问管理方式。

这里的Token是把关键信息通过加密转化成为一串密文,并把这个密文交给客户端进行存储,这样既减轻了服务器的压力,又保证了用户的个人信息的保密。但其实它本质上还是没有Session安全,毕竟Session是直接存储在服务器的,黑客获取的难度高了不少。

Tooken与Session的区别:

Token和Session是两种常见的身份验证和授权机制,它们有以下几个主要区别:

  1. 存储位置:Session数据存储在服务器端,而Token通常存储在客户端(如浏览器或移动应用)。

  2. 状态性:Session是有状态的机制,服务器需要在会话期间维护相关的会话数据。而Token是无状态的机制,服务器不需要维护任何状态,只需验证Token的有效性即可。

  3. 数据存储:Session存储的是身份验证和授权相关的用户数据,如用户信息、权限等。而Token通常携带一定的用户信息和授权信息,以便服务器进行验证和授权,但不存储在服务器端。

  4. 可扩展性:由于Session需要在服务器端存储会话数据,因此对于大规模和高并发的应用来说,需要考虑服务器端的存储和管理压力。而Token的验证是无状态的,可以更容易地实现水平扩展和负载均衡,适用于分布式系统和跨域应用。

  5. 安全性:Session的数据存储在服务器端,相对来说更安全。Token存储在客户端,需要采取一些措施来保护其安全性,例如使用HTTPS协议来进行传输和存储、使用加密算法进行签名等。

  6. 适用场景:Session适用于传统的Web应用程序,其中有一定的用户身份验证和会话管理需求。Token适用于分布式系统、前后端分离的应用和API身份验证等场景,特别是在多个应用程序之间共享身份和授权信息时。

综上所述,Token和Session在存储位置、状态性、数据存储、可扩展性、安全性和适用场景等方面存在不同。选择使用哪种机制取决于具体的需求和应用场景。在实际开发中,常常根据应用的特点和需求,选择合适的身份验证和授权机制。

Token的代码实现(Java):

生成Token:

 public void testjwt()
    {
        Map<String, Object> claims = new HashMap<>();
        claims.put("id",1);
        claims.put("name","tom");
        String s = Jwts.builder()
                .signWith(SignatureAlgorithm.HS256, "LIYUANIXN")//签名算法
                .setClaims(claims)//设置自定义内容
                .setExpiration(new Date(System.currentTimeMillis() + 3600 * 1000))//设置令牌的有效期为一个小时
                .compact();
        System.out.println(s);
    }

生成结果:

 

解析Token:

public void test1() {

        Claims claims = Jwts.parser()
                .setSigningKey("LIYUANIXN")
                .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoidG9tIiwiaWQiOjEsImV4cCI6MTY5NjUyMDE5OX0.c0s8Dw3h1EWOdI7tRGDRdDXI-92wZ3blw-p8s8jJm5E")
                .getBody();
        System.out.println(claims);
    }

 解析结果:

Cookie 与 Session 与Token 概括:

Cookie:

  • Cookie是将数据存储在用户浏览器中的一种机制。
  • 它用于在客户端和服务器之间传输数据,并保持持久化连接。
  • Cookie存储在客户端,可能存在安全风险。
  • 可以使用Cookie实现用户身份验证、跟踪会话状态等功能。

Session:

  • Session是将会话数据存储在服务器端的机制。
  • 服务器为每个会话生成一个唯一的会话ID。
  • 会话数据保存在服务器端,用户无法直接访问和修改。
  • 客户端通过会话ID与服务器进行会话验证和数据交互。
  • Session提高了数据的安全性,支持存储容量大,对网络流量影响小。

Token:

  • Token是一种在网络通信中用于身份验证和授权的令牌。
  • Token通常存储在客户端,作为验证请求的凭证。
  • 客户端发送Token到服务器进行身份验证和授权验证。
  • Token可以是访问令牌、JSON Web Token(JWT)等不同类型。
  • Token是无状态的,不需要在服务器端维护会话状态。

总结: 

        Cookie是将数据存储在客户端的机制,而Session是将数据存储在服务器端的机制。Token是一种令牌机制,用于身份验证和授权。Cookie存在安全风险,Session相对安全且可控,而Token是无状态的且适用于分布式系统。选择使用哪种机制应根据具体需求和应用场景来决定。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

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

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

相关文章

C++基础知识(三) -- 引用

1 引用概念 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名(俗称)&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 比如&#xff1a;李逵&#xff0c;在家称为"铁牛"&#xff0c;江湖上人称"…

动态内存管理<C语言>

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

深度学习基础之GFLOPS(2)

什么是GFLOPS 神经网络的GFLOPS&#xff08;Giga FLoating-Point Operations Per Second&#xff09;代表了神经网络模型执行计算的速度和计算能力。这可以用一个类比来解释&#xff1a; GFLOPS就像神经网络模型的"运算速度"标签。 想象你有两个数学家&#xff0c…

macOS下 /etc/hosts 文件权限问题修复方案

文章目录 前言解决方案权限验证 macOS下 etc/hosts 文件权限问题修复 前言 当在 macOS 上使用 vi编辑 /etc/hosts 文件时发现出现 Permission Denied 的提示,就算在前面加上 sudo 也照样出现一样的提示,解决方案如下; 解决方案 可以尝试使用如下命令尝试解除锁定; sudo chf…

Spring5应用之Cglib动态代理

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Spring5应用专栏_Aomsir的博客-CSDN博客 文章目录 前言Cglib动态代理…

STM32--基于STM32的智能家居设计与实现

本文详细介绍基于STM32F103C8T6的智能家居设计与实现&#xff0c;详细设计资料见文末链接 一、功能模块介绍 智能家居系统系统图如下所示&#xff0c;主要包括温湿度传感器、OLED液晶显示&#xff0c;WIFI物联网模块、人体红外预警模块、烟雾传感器模块、蜂鸣器模块 &#…

手边酒店V2独立版小程序 1.0.21 免授权+小程序前端

手边酒店小程序独立版酒店宾馆订房系统支持创建多个小程序&#xff0c;让每一个客户单独管理属于自己的小程序。后台支持一键入住&#xff0c;一键退款、退押金、钟点房支持微信支付、模板消息。客服实时收到新的订单信息&#xff0c;可以在手机端处理订单。支持按日期维护房价…

浅谈wor2vec,RNN,LSTM,Transfermer之间的关系

浅谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer之间的关系 今天博主谈一谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer这些方法之间的关系。 首先&#xff0c;我先做一个定位&#xff0c;其实Transfermer是RNN&#xff0c;LSTM&…

ActiveMQ消息中间件介绍

一、ActiveMQ简介 ActiveMQ是Apache出品&#xff0c;最流行的&#xff0c;能力强劲的开源消息总线。ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provide实现。尽管JMS规范出台已经是很久的事情了&#xff0c;但是JMS在当今的J2EE应用中仍然扮演这特殊的地位。 二、Active…

【逐步剖C】-第十一章-动态内存管理

一、为什么要有动态内存管理 从我们平常的学习经历来看&#xff0c;所开辟的数组一般都为固定长度大小的数组&#xff1b;但从很多现实需求来看需要我们开辟一个长度“可变”的数组&#xff0c;即这个数组的大小不能在建立数组时就指定&#xff0c;需要根据某个变量作为标准。…

小样本学习——匹配网络

目录 匹配网络 &#xff08;1&#xff09;简单介绍&#xff1a; &#xff08;2&#xff09;专业术语 &#xff08;3&#xff09;主要思想 &#xff08;4&#xff09;训练过程 问题 回答 MANN 匹配网络 &#xff08;1&#xff09;简单介绍&#xff1a; Matching netwo…

【C++设计模式之装饰模式:结构型】分析及示例

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在运行时动态地给一个对象添加额外的行为。 描述 装饰模式通过创建一个包装器&#xff08;Wrapper&#xff09;来包裹原始对象&#xff0c;并在原始对象的行为前后添加额外的功能。…

JAVA学习(5)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

git提交代码的流程

1.拉取代码 当你进入了一家公司就需要拉去公司的代码进行开发,此时你的项目小组长会给你个地址拉代码, git clone 公司项目的地址 此时如果不使用了这个方式拉去代码,拉去的是master分支上的代码,但是很多数的情况下&#xff0c;公司的项目可能会在其它的分支上,因此到公…

XXL-JOB源码梳理——一文理清XXL-JOB实现方案

分布式定时任务调度系统 流程分析 一个分布式定时任务&#xff0c;需要具备有以下几点功能&#xff1a; 核心功能&#xff1a;定时调度、任务管理、可观测日志高可用&#xff1a;集群、分片、失败处理高性能&#xff1a;分布式锁扩展功能&#xff1a;可视化运维、多语言、任…

微信小程序代驾系统源码(含未编译前端,二开无忧) v2.5

简介&#xff1a; 如今有越来越多的人在网上做代驾&#xff0c;打造一个代驾平台&#xff0c;既可以让司机增加一笔额外的收入&#xff0c;也解决了车主酒后不能开发的问题&#xff0c;代驾系统基于微信小程序开发的代驾系统支持一键下单叫代驾&#xff0c;支持代驾人员保证金…

【15】c++设计模式——>抽象工厂模式

在海贼世界中&#xff0c;位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族&#xff0c;当然了他们的逆向工程做的也很好&#xff0c;会拆船必然会造船。船是海贼们出海所必备的海上交通工具&#xff0c;它由很多的零件组成&#xff0c;从宏观上看它有这么几个…

数据结构--》探索数据结构中的字符串结构与算法

本文将带你深入了解串的基本概念、表示方法以及串操作的常见算法。通过深入理解串的相关概念和操作&#xff0c;我们将能够更好地应用它们来解决算法问题。 无论你是初学者还是进阶者&#xff0c;本文将为你提供简单易懂、实用可行的知识点&#xff0c;帮助你更好地掌握串在数据…

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore

【云笔记篇】Microsoft OneNote笔记插件推荐OneMore OneMore插件是一款非常强大&#xff0c;多达一百多个扩展功能的OneNote笔记插件&#xff0c;而且免费开源&#xff0c;不断更新的优秀插件—【蘇小沐】 1、实验 【OneMore官网&#xff1a;OneMore - a OneNote add-in (on…