快速理解会话跟踪技术Cookie和Session

news2024/11/17 23:40:16

文章目录

  • 会话跟踪技术
  • 客户端会话跟踪技术Cookie
  • 服务端会话跟踪技术Session

会话跟踪技术

  • 会话:客服端和服务端的多次请求与响应称为会话。

  • 会话跟踪:服务器需要识别多次请求是否来自同一浏览器,在同一次会话多次请求中共享数据。

    HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求,因此需要会话跟踪技术实现数据共享。会话跟踪技术可以分为Cookie和Session。

客户端会话跟踪技术Cookie

在这里插入图片描述

  • 数据保存在客户端,每次请求都会携带Cookie数据。如上图所示,浏览器向服务端发送第一次请求时,服务端创建一个Cookie存储username及其对应值zs,在响应中添加Cookie传送到浏览器,浏览器存储该Cookie;浏览器向服务端发送第二次请求时,携带所保存的Cookie,服务器通过getCookies()方法得到浏览器中的所有Cookie。
  • 具体实现:
		// 第一次请求发送Cookie 
		Cookie cookie = new Cookie(key, value);  // 创建Cookie
		respones.addCookie(cookie); // 添加Cookie
		// 第二次请求获取Cookie,所有cookie都以数组形式返回
		Cookie[] cookies = request.getCookies();
		// 选择一个cookie,以0为例获取
		String name = cookies[0].getName();
		String value = cookies[0].getValue();
  • Cookie原理:基于HTTP协议
    • 响应头 set-cookie 携带设置好的Cooike返回客户端,客户端保存携带的Cookie
    • 请求头 cookie 携带客户端存储的Cookie发送请求
  • 存活时间:
    • 默认情况下,Cookie存储在浏览器内存中,浏览器关闭,Cookie就被销毁
    • setMaxAge(int seconds) 设置存活时间
      • 正数:Cookie写入电脑硬盘,到时间自动删除
      • 负数:默认值,浏览器关闭,Cookie被销毁
      • 0:删除对应Cookie

服务端会话跟踪技术Session

一次会话多次请求间,怎么保证服务器获取的是同一个Session?

  • 数据保存在服务端。如上图所示,浏览器向服务器发送第一次请求时,服务器通过session的setAttribute()方法保存键值对;第二次发送请求时,由于是同一会话,服务器取得的和第一次相同的session,通过getAttribute()方法得到对应键值对。两次请求服务端是怎么确定是同一会话?因为第一次请求时,服务端将session的id保存为Cookie传送到浏览器,浏览器保存这次会话的session id,第二次请求时,携带第一次请求的session id,服务端通过session id得到与第一次相同的session,保证了两次请求获取的是同一个session。
  • 基本使用:
		// 获取Session
		HttpSession session = request.getSession();
		// 设置session
		session.setAttribute(key, value);
		// 得到session
		session.getAttribute(key);
		// 删除session
		session.removeAttribute(key);
  • Session原理:

    • 基于Cookie
    • 如何保证一次会话多次请求是同一个Session?
      Session id(JSESSIONID)被存储为Cookie保存在客户端,下一次请求根据携带的Cookie中的JSESSIONID查找对应Session。
  • 使用细节:

    • Session钝化、活化
      • 钝化:服务器正常关闭后,Tomcat会自动将数据写入硬盘的文件中
      • 活化:再次启动服务器后,从文件中加载数据到Session中
        (咱理解成三体人脱水、浸泡吧)
    • Session销毁
      • 默认30分钟销毁
      • session. Invalidate(); 自己销毁

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

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

相关文章

chatgpt赋能python:Python加解密算法简介

Python加解密算法简介 在当今数字化的时代,数据的安全性变得至关重要。而加密算法就成为了保障数据安全的重要手段之一。Python作为一门高级编程语言,提供了许多加密算法库,使得开发人员可以轻松地实现加密功能。本文将着重介绍Python中一些…

机器学习模型——回归模型

文章目录 监督学习——回归模型线性回归模型最小二乘法求解线性回归代码实现引入依赖:导入数据:定义损失函数:定义核心算法拟合函数:测试:画出拟合曲线: 多元线性回归梯度下降求线性回归梯度下降和最小二乘…

chatgpt赋能python:Python中%取模操作的介绍

Python中%取模操作的介绍 在Python中,取模操作使用符号“%”表示,它的作用是取两个数相除的余数。例如,10 % 3等于1,因为10除以3的余数为1。这个操作可以用在很多场合,比如判断一个数是奇数还是偶数,或者判…

带你开发一个远程控制项目---->STM32+标准库+阿里云平台+传感器模块+远程显示。

目录 本次实验项目: 下次实验项目: 本次项目视频结果/APP/实物展示 实物展示 APP展示 视频展示 模块选择说明; 温湿度传感器模块介绍 光照传感器介绍 ESP8266-01S模块介绍 本次实验项目: 项目清单平台单片机语言实现温湿度传感器模…

Reinforcement Learning | 强化学习十种应用场景及新手学习入门教程

文章目录 1.在自动驾驶汽车中的应用2.强化学习的行业自动化3.强化学习在贸易和金融中的应用4.NLP(自然语言处理)中的强化学习5.强化学习在医疗保健中的应用6.强化学习在工程中的应用7.新闻推荐中的强化学习8.游戏中的强化学习9.实时出价——强化学习在营…

Redis中的Reactor模型源码探索

文章目录 摘要了解Linux的epoll了解Reactor模型 源码initServerinitListenersaeMain 事件管理器aeProcessEvents读事件 摘要 有时候在面试的时候会被问到Redis为什么那么快?有一点就是客户端请求和应答是基于I/O多路复用(比如linux的epoll)的…

【高级语言程序设计(一)】第 9 章:编译预处理命令

目录 前言 一、宏定义命令 (1)无参宏定义 (2)有参宏定义 ① 带参数的宏定义 ② 带参宏定义与函数的区别 二、文件包含命 (1)文件包含命令的定义 (2)文件包含命令的格式 &…

【Leetcode60天带刷】day02—— 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

题目:997.有序数组的平方 Leetcode原题链接:997.有序数组的平方——力扣 思考历程与知识点: 题目的意思很简单,就是把每个数的平方,按从小到大的顺序排个序,再输出出来。 第一想法是先每个数平方一遍&a…

Stream API的使用

使用Stream API对集合中的数据进行操作,就类似使用SQL语句对数据库执行查询 Stream不会存储数据Stream不会改变源对象,而是返回一个持有结果的新StreamStream是延迟执行的,只有在需要结果的时候才执行,即只有执行终止操作&#xf…

离散数学_十章-图 ( 2 ):图的术语和几种特殊的图

📷10.2 图的术语和几种特殊的图 1. 基本术语1.1 邻接(相邻)1.2 邻居1.3 顶点的度1.4 孤立点1.5 悬挂点例题 2. 握手定理3. 握手定理的推论4. 带有有向边的图的术语4.1 邻接4.2 度——出度 和 入度4.3 例题: 5. 定理:入…

PHP 反序列化漏洞

PHP反序列化漏洞在实际测试中出现的频率并不高,主要常出现在CTF中。 PHP序列化概述 PHP序列化函数: serialize:将PHP的数据,数组,对象等序列化为字符串unserialize:将序列化后的字符串反序列化为数据&…

chatgpt赋能python:Python单词库的重要性

Python单词库的重要性 Python是一种高级编程语言,被广泛用于应用程序开发、网络编程、数据科学和人工智能开发等领域。而在Python编程中,单词库(或词典)的重要性不言而喻。单词库就是存放Python程序中经常使用的关键字、方法名、函数名等词汇的地方。本…

SpringBoot --- 实用篇

一、热部署 1.1、概念 什么是热部署?简单说就是你程序改了,现在要重新启动服务器,嫌麻烦?不用重启,服务器会自己悄悄的把更新后的程序给重新加载一遍,这就是热部署。 ​ 热部署的功能是如何实现的呢&…

谷歌浏览器被2345劫持

方法1: 打开控制面板的卸载程序,搜索2345,把那个恶心的“安全组件-2345”卸载掉!! 这个方法比修改 host 以及注册表要好使地多! 参考网址: 【小技巧】修复chrome被2345劫持 方法2: …

Alma Linux 9.2、Rocky Linux 9.2现在是RHEL 9.2的替代品

随着Red Hat Enterprise Linux (RHEL) 9.2的发布,Alma Linux 9.2和Rocky Linux 9.2成为了RHEL 9.2的备选替代品。这两个Linux发行版旨在提供与RHEL兼容的功能和稳定性,以满足那些需要企业级操作系统的用户需求。本文将详细介绍Alma Linux 9.2和Rocky Lin…

nginx反向代理缓存

背景 nginx 一般用来做反向代理和负载均衡,将客户端请求发送到后端的 jetty,并将 jetty 的响应发送给客户端。后端的 jetty 通常不止一个,nginx 根据配置来选择其中一个 jetty,比较常见的选择策略是轮询。示意图如下 启动缓存支…

oracle19c介绍和安装

目录 一、版本 (1)历史 (2)11g和12c管理方式区别 11g 12C (3)各个版本对操作系统要求 二、分类 (1)分为桌面类和服务器类 (2)分为企业版和标准版 三…

基于遗传算法的BP神经网络优化算法(matlab实现)

1 理论基础 1.1 BP神经网络概述 BP网络是一类多层的前馈神经网络。它的名字源于在网络训练的过程中,调整网络的权值的算法是误差的反向传播的学习算法,即为BP学习算法。BP算法是Rumelhart等人在1986年提出来的。由于它的结构简单,可调整的…

个人网站实现微信扫码登录

⭐个人网站实现微信扫码登录 🥈效果图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kzSrNgiv-1685034480658)(https://img.ggball.top/picGo/动画.gif)] 📗开发背景 为什么想用微信扫码登录呢? 起因是自己开发…

【CH32】| 02——常用外设 | GPIO

系列文章目录 【CH32】| 00——开发环境搭建 【CH32】| 01——新建工程 | 下载 | 运行 |调试 【CH32】| 02——常用外设 | GPIO 失败了也挺可爱,成功了就超帅。 文章目录 前言1. GPIO简介2. IO口的内部结构框图保护二极管上下拉电阻施密特触发器两个MOS管输出寄存器…