会话跟踪技术:Cookie、Session和Token

news/2023/5/28 8:57:37

会话跟踪技术

  • 背景:
  • 1. Cookie (客户端的会话跟踪技术)
    • 1.1 原理
    • 1.2 基本使用
      • 1.2.1 服务器发送Cookie
      • 1.2.2 服务器获取Cookie
    • 1.3 使用细节
      • 1.3.1 存活时间
      • 1.3.2 存储中文
  • 2. Session(服务端的会话跟踪技术)
    • 2.1 原理
    • 2.2 基本使用
      • 2.2.1 获取Session对象
      • 2.2.1 Session对象的功能
    • 2.3 使用细节
      • 2.3.1 Session钝化、活化
      • 2.3.2 Session销毁
  • Cookie与Session的区别:
  • 3. Token

背景:

HTTP无状态的协议,即服务器对客户端没有记忆能力,它的每个请求都是完全独立的,发送请求不涉及到状态变更。

无状态的后果: 意味着后续发出的请求需要先处理前面请求的响应,则必须重传前面的请求,这导致需要额外传递一些前面的重复请求,才能获取后续响应,会大大浪费资源;

-------------所以需要 会话跟踪技术 来解决无状态的问题 !实现一次会话的多次请求内数据共享!

1. Cookie (客户端的会话跟踪技术)

Cookie的实现是基于HTTP协议的;
Cookie是客户端保存用户信息的一种机制 ,本质是存储在浏览器的一小段文本数据,不超过4kb;

过程
【第一次发送HTTP请求时】,服务器产生Cookie并返回给浏览器存储,
【以后浏览器每次发送HTTP请求时】,HTTP的请求报文的请求头中都会带着Cookie(请求头的格式为字段名和value值)

缺点: 安全性

  1. Cookie是放在【HTTP请求报文】的头部行中,是以明文形式在网络中传输,若没有加密,一旦被截获,可以直接获取隐私信息
  2. 即使是Cookie被MD5加密,一旦Cookie被截获,把别人的Cookie向服务器提交,并且能够通过验证,就可以冒充受害人的身份登陆网站--------Cookie欺骗

1.1 原理

  • 在servletA创建了Cookie对象并封装在respond对象中,
  • Tomcat解析respond对象,会将Coockie键值对放到HTTP响应报文的 响应头 set-cookie:username=zs
  • 浏览器拿到并解析响应报文,拿到数据username=zs并存储;
  • 当下一次浏览器要访问servletB,会在HTTP请求报文的 请求头 中带上:cookie:username=zs
  • Tomcat解析浏览器发送的HTTP请求报文,将数据存入request对象,通过request对象来获取Cookie数组;
    在这里插入图片描述

1.2 基本使用

作为服务端,需要关注的:
①发送Cookie,
②接收到Cookie后获取其中的信息

1.2.1 服务器发送Cookie

  1. 在Servlet中,创建Cookie对象,设置数据;
    在这里插入图片描述

  2. 将Cookie对象添加到Response对象,而后由Tomcat读取respond中数据并拼接成HTTP响应报文格式发给客户端;
    在这里插入图片描述

例:发送Cookie
在这里插入图片描述
启动Tomcat,访问aServlet就会执行cookie相关代码;

查看响应报文(响应头):
在这里插入图片描述

此时打开浏览器设置,能找到刚才发送的Cookie:
在这里插入图片描述

1.2.2 服务器获取Cookie

注:浏览器访问服务器时会在HTTP请求报文的请求头中带着所有Cookie,每对用分号隔开;
在这里插入图片描述

  1. 使用request对象来获取Cookie数组
    在这里插入图片描述
  2. 遍历Cookie数组,获取每一个Cookie
  3. 使用Cookie对象方法获取数据;
    在这里插入图片描述

例:获取Cookie数组,只取出name=”username“的那个Cookie,打印出name和value:
在这里插入图片描述
此时访问bServlet,浏览器携带了Cookie,由servlet获取,在控制台打印:
在这里插入图片描述

1.3 使用细节

1.3.1 存活时间

【默认情况下】,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,Cookie会被销毁;

Cookie持久化setMaxAge(int seconds) 设置Cookie存活时间;

  1. 正数:将Cookie写入浏览器所在磁盘,持久化存储!到时间自动删除
  2. 负数,默认值,Cookie存在浏览器内存中,浏览器关闭,则Cookie被销毁
  3. 零:删除对应Cookie

1.3.2 存储中文

默认情况下不能存储中文!
解决

  1. 将value用URL编码
    在这里插入图片描述
  2. 中文被编码为:
    在这里插入图片描述
  3. 再对value进行解码
    在这里插入图片描述
    成功解码:
    在这里插入图片描述

2. Session(服务端的会话跟踪技术)

Session机制一般借助Cookie来实现
session对象存储在服务器中,用于记录用户的状态
sessionID无规律的字符串,存储在浏览器端的【Cookie中】;
当浏览器【发送HTTP请求时】会带着sessionID,服务器根据SessionID就能找出用户信息
session会配置一个过期时间(默认30min),过期后需要重新登录;

当客户端第一次访问服务器时,【服务器创建session出来后】,会把sessionID以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号,服务器发现客户机浏览器带sessionID过来了,就会使用中与之对应的session为之服务。

运行机制:
1.主机的浏览器进程与服务器进程建立浏览器连接
2.当用户浏览器进程【第一次向服务器进程发送HTTP请求报文时】,服务器进程就会为其产生一个唯一的sessionID,并以此为索引在服务器的后端数据库创建session对象,用来记录该用户访问该网站的各种信息
3.接着服务器给浏览器进程发回HTTP响应报文,在响应报文中,包含一个首部字段为Set-Cookie的首部行,该字段由服务器写入了sessionID,以及会话结束时间
4.当浏览器进程收到该响应报文后,就在一个特定的Cookie文件中添加一行,记录该服务器的域名和Cookie;
5.【当用户再次使用浏览器访问这个网站时】,每发送一个HTTP请求报文,浏览器都会从Cookie文件中取出该网站的sessionID,并放到HTTP请求报文的Cookie 头部行 中,服务器根据sessionID就可以识别该用户,返回相关信息;

2.1 原理

Session是基于Cookie实现的;
在这里插入图片描述

为什么在一次会话的多次请求之间获取的都是同一个Session对象 ?
浏览器访问服务端,servlet会自动生成Session对象ID并放入Cookie,发给浏览器(HTTP响应报文的响应头);
在这里插入图片描述

浏览器收到后将SessionID存入内存/磁盘;
下次浏览器携带着Cookie:SessionID=10 访问Servlet,Servlet收到SessionID后寻找这个SessionID的对象,如果有就直接使用,没有则创建新的Session对象;
在这里插入图片描述

而当另一个浏览器的请求3访问Servlet时没有携带sessionID或者不一样,servlet就无法获取刚才sessionID=10的SessionID对象,这就保证了同一个会话的session是同一个;

2.2 基本使用

2.2.1 获取Session对象

在这里插入图片描述

2.2.1 Session对象的功能

在这里插入图片描述
注:setAttribute的值可以存任意类型!

例:
ServletDemo1:通过request对象获取Session对象并存数据
在这里插入图片描述
ServletDemo2:读取Session并获取数据

输出zs;
即session对象被两次请求所访问,即在一次会话的两次请求之间共享数据!

2.3 使用细节

2.3.1 Session钝化、活化

钝化(序列号):【服务器正常关闭后】,Tomcat会自动将Session数据写入硬盘的文件中;
活化(反序列化):再次启动服务器后,从文件加载数据;
Session是对象,钝化即序列号,活化即反序列化;

2.3.2 Session销毁

  1. 默认情况下,误操作,Session会在30分钟内销毁(提示:登陆时间太长没有操作,已经自动退出请重新登陆)
    也可以在xml文件中设置时间:
    在这里插入图片描述

  2. 调用Session对象的invalidate()方法,如前端用户选择“登出”时,就需要销毁Session !

注意:
浏览器中途关闭,再次访问时,不是同一个Session对象,因为已经不是同一次会话了!

Cookie与Session的区别:

Cookie和Session都是完成一次会话多次请求间的数据共享;

  1. 储存:cookie储存在浏览器内存/磁盘,
    session对象储存在服务器中,而sessionID存于Cookie中,
  2. 安全性:session比cookie更加安全
    ①Cookie存在客户端,每次都在网络中传输,容易被盗取、截获;
    ②seesionID是随机字符串而不是明文,避免了直接存用户名密码,提高安全性
    有会话时间限制,且可以选择使用签名,而cookie容易造成cookie欺骗
  3. 数据类型不同:cookie只支持字符串数据,session对象可以储存任意类型数据(Object)!
  4. 有效期不同:cookie存活时间可设置较长时间,而session存活时间相对较短(默认30min);
  5. 存储大小不同:单个cookie的数据不能超过4KB,session储存的数据内容可以更大;

3. Token

引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个令牌,当用户第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码,减轻服务器的压力。

运行机制:

1.客户端使用用户名跟密码请求登录;
2.服务端收到请求,去验证用户名与密码;
3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token;
6.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

服务器并不保存token,而是通过数据签名的方法,对数据用算法(如SHA-256)与私钥进行签名后作为Token,当Token发送给服务器时,服务会通过相同的算法与密钥进行签名,如果和Token中的签名相同,服务器就知道用户已经登录过了,并且可以直接得到用户的userID。(服务器用cpu的计算时间来换取了储存空间

token和session的区别?
token和session其实都是为了身份验证
服务端session存用户数据,客户端访问服务端的时候,根据sessionid找用户数据;而使用token时服务端只有一段加密代码;
同样,session和token都是有过期时间一说,都需要去管理过期时间;
其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。

虽然确实都是“客户端记录,每次访问携带”,但使用token则后端不需要记录什么东西,每次解密验证即可
而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

hevc AMVP模式

1 AMVP模式 高级运动矢量预测模式下的候选运动矢量列表的生成过程与merge候选列表的模式类似, 它的候选列表也分为空域和时域两种情况。也是利用时域和空域上的运动向量的相关性建立当前编码单元的运动矢量候选列表。不同的是,AMVP的candidate只有2个MV…

浅谈 MVC、MVP 和 MVVM 架构模式

2019独角兽企业重金招聘Python工程师标准>>> 谈谈 MVX 中的 Model谈谈 MVX 中的 View谈谈 MVX 中的 Controller浅谈 MVC、MVP 和 MVVM 架构模式这是 MVX 系列的第四篇文章,在前面的文章中,我们先后介绍了 MVC 架构模式中的 Model、View 和 Co…

HEVC帧间预测

帧间预测是利用视频时间域的相关性,使用邻近已编码图像像素预测当前图像的像素,以达到有效去除视频时域冗余的目的。目前主要采用基于块的运动补偿技术,原理是为当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,即运动…

HEVC中的Merge Mode——x265代码getInterMergeCandidates()函数解析

HEVC中的mv预测技术主要分为两种:AMVP mode 和Merge mode,这里就主要来聊聊Merge mode。 由于很多时候当前的编码CU与相邻已经完成编码的CU具有相同的mv,因此从相邻的若干个PU中获取最佳的mv就是Merge mode要做的主要事情: 通过搜…

【二十】 H.266/VVC | 仿射运动估计AMVP继承相邻块的运动信息函数 | addAffineMVPCandUnscaled函数

/* 函数的作用:检验当前PU的相邻PU的运动信息是否可以继承,可以的话保存并返回true,否则返回false 函数的返回值是一个bool类型 形参说明 1、const PredictionUnit &pu 当前编码单元PU 2、const RefPicList &refPicList 当前PU的参考列表 3、c…

HM代码阅读3:AMVP候选填充函数Void TComDataCU::fillMvpCand ()

AMVP候选理论回顾 根据图像中块与块的相关性计算,针对当前块,空域上与其相关性最强的块的位置如下图所示: 时域上相关性的最强的块如下图所示: HM中该MVP填充流程如下: 计算得到当前PU左上、左下、右上的4x4块的索…

HM编码器代码阅读(31)——帧间预测之AMVP/Merge模式(六)运动补偿

运动补偿 原理 说实话一直很难理解运动补偿中“补偿”二字的意思,在参考了 http://blog.csdn.net/hevc_cjl/article/details/8457642 和百度百科以及分析的源代码之后,我大致猜测了一下它的功能: 百科上说“运动补偿是通过先前的局部图像…

【二十二】 H.266/VVC | 选择最优的仿射AMVP候选项 | xEstimateAffineAMVP函数

/* 函数的所用:从构建的仿射AMVP候选列表中选择最优的候选项 函数的参数说明: 1、PredictionUnit& pu, 当前编码的PU 2、AffineAMVPInfo& affineAMVPInfo 存放仿射AMVP候选列表的结构体 3、PelUnitBuf& origBuf, 存储当前PU像素信息的缓冲区 4、RefPicList eRe…

【二十一】 H.266/VVC | 仿射运动估计AMVP候选列表的构建 | fillAffineMvpCand函数

/* 函数的作用: 构建Affine AMVP list候选列表 函数的参数说明: 1、PredictionUnit &pu 当前编码的PU 2、const RefPicList &eRefPicList 当前PU的参考图像列表 3、const int &refIdx 当前PU的参考图像在参考图像列表中的索引值 4、AffineAMVPInfo &affiAMVPI…

H.266/VVC帧间预测技术学习:高级运动矢量预测(Advanced Motion Vector Prediction, AMVP)

高级运动矢量预测模式(Advanced Motion Vector Prediction,AMVP) AMVP模式是H.265/HEVC中提出的新的MV预测技术,H.266/VVC仍采用了该技术,并在HEVC的基础上进行了改进。AMVP利用空域和时域的运动矢量的相关性,为当前PU建立了候选…

merge和AMVP

1.merge和AMVP2.意义3.代码 1.merge和AMVP 空域和时域相邻块的mv有一定的相关性,HEVC在mv预测方面提出merge和AMVP技术。merge和AMVP技术通过空域和时域已编码块构建候选mv列表,选取最优的一个当作当前PU的预测mv。merge不存在MVD,AMVP存在M…

HEVC 高级运动向量预测技术(AMVP)

代码版本: VTHEVCDec 函数: fillMvpCand() 时间: 2015/8/26 作者: lb 高级运动向量预测技术(AMVP)利用空间、时间上运动向量的相关性,分别建立空域候选列表以及时域候选列表,再从…

帧间预测--AMVP模式理论部分

上一篇提到的merge模式下直接使用MVP作为MV,AMVP模式多了一个MVD的计算,当然并不仅仅是这点,下面看AMVP实现的理论流程,我尽力还原我学习的思维历程。 参考西电杨老师的书《H.265/HEVC原理、标准与实现》,学习HEVC的手…

uboot启动流程详细分析(基于i.m6ull)

uboot介绍 uboot就是一段引导程序,在加载系统内核之前,完成硬件初始化,内存映射,为后续内核的引导提供一个良好的环境。uboot是bootloader的一种,全称为universal boot loader。 一、uboot的makefile 1.1 makefile整…

神经网络与深度学习(六)卷积神经网络(5)使用预训练resnet18实现CIFAR-10分类

目录 5.5 实践:基于ResNet18网络完成图像分类任务 5.5.1 数据处理 5.5.1.1 数据集介绍 5.5.1.2 数据读取 5.5.1.3 构造Dataset类 5.5.2 模型构建 1.什么是“预训练模型”?什么是“迁移学习”? 2.比较“使用预训练模型”和“不使用预…

转载: ASP.NET生成汉字图片验证码

Code<% Page Language"C#" AutoEventWireup"True" %> <% import Namespace"System"%><% import Namespace"System.Collections.Generic"%><% import Namespace"System.Text"%><% import Namesp

【matlab图像处理】图像处理的逻辑运算

中国史之【周公定《周礼》】&#xff1a; 周礼是西周的政治制度之一&#xff0c;在周公主持下制定。其内容比较广泛&#xff0c;除了有关政刑的各种制度外&#xff0c;还有吉、凶、军、宾、嘉礼。周朝礼乐制度对维护当时社会秩序、巩固王朝统治起到了重大作用。 ——来源&#…

CS231n课程笔记翻译2:图像分类笔记

译者注 &#xff1a;本文 智能单元 首发&#xff0c;译自斯坦福CS231n课程笔记 image classification notes &#xff0c;由课程教师 Andrej Karpathy 授权进行翻译。本篇教程由 杜客 翻译完成。 ShiqingFan 对译文进行了仔细校对&#xff0c;提出了大量修改建议&#xff0c;态…

matlab求组合数不想求组合数矩阵,【潘德的预言】用关系模型与组合数计算NPC最大相容人数和所有组合...

本帖最后由 wwwmajin 于 2013-6-19 19:44 编辑本文重在从纯技术角度来寻找潘德NPC的最佳组合&#xff0c;共分4个部分第一 背景介绍第二 本文研究方法第三 结果第四 结论第一 背景介绍大家喜欢收集NPC吗&#xff1f; 喜欢尽量收集全NPC吗&#xff1f; 本人便是一个具有收集NPC癖…

人工智能图像形状检测算法

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…