当前位置: 首页 > news >正文

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir

  • Cookie技术
    • Cookie简单示意图
    • Cookie常用方法
    • Cookie创建
    • Cookie读取
      • JSESSIONID
      • 读取指定Cookie
    • Cookie修改
    • Cookie生命周期
    • Cookie的有效路径
    • Cookie作业布置
    • Cookie注意事项
      • Cookie中文乱码问题
  • Session技术
    • Session原理示意图
    • Session常用方法
    • Session底层机制
    • Session生命周期
      • Session生命周期说明
      • Session生命周期实例
    • Session作业

在这里插入图片描述

Cookie技术

Cookie简单示意图

  1. Cookie是服务器在客户端保存的用户信息, 比如登录名, 浏览历史等, 就可以以cookie的方式保存
  2. Cookie信息就像是小甜饼(cookie)一样, 数据量并不大, 服务器端在需要的时候可以从客户端读取
    在这里插入图片描述

位置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Cookie常用方法

  1. Cookie有点像一张表(K-V), 分两列, 一个是名字, 一个是值, 数据类型都是String, 都是小量的数据, 如图
    在这里插入图片描述
  2. 如果创建一个Cookie(在服务端创建)
    Cookie cookie = new Cookie(String name, String val);
    cookie.setMaxAge();//保存时间
  3. 如何将一个Cookie添加到客户端
    response.addCookie(cookie);
  4. 如何读取cookie(在服务端读取cookie信息)
    request.getCookies();

Cookie创建

新建一个Web工程->添加Web框架->新建lib, 引入servlet包Add as Library->配置tomcat->创建Servlet->浏览器抓包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cookie读取

在这里插入图片描述
在这里插入图片描述

JSESSIONID

  1. 提示: 访问Servlet(比如 http://localhost:8088/cs/updateCookie)不会生成JSESSIONID, 访问http://localhost:8088/cs/才会生成
  2. 要关闭浏览器再开一个新的, 才能产生一个新的session绘画

在这里插入图片描述

读取指定Cookie

在这里插入图片描述
在这里插入图片描述

Cookie修改

在这里插入图片描述

Cookie生命周期

  1. Cookie的生命周期是指如何管理Cookie什么时候被销毁(删除)
  2. setMaxAge()
  1. 正数, 表示在指定的秒数后过期, 但仍存在于浏览器中
    在这里插入图片描述
  2. 0表示马上在浏览器端删除Cookie
    在这里插入图片描述
    这里为何会有两个Set-Cookie?
    在这里插入图片描述
  3. 负数, 表示浏览器关闭, Cookie就会被删除(默认值是-1)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Cookie的有效路径

规则如下:
cookie1.setPath = /工程路径
cookie2.setPath = /工程路径/aaa
请求地址: http://ip:端口/工程路径/资源
cookie1 会发送给浏览器
cookie2 不会发送给浏览器
请求地址: http://ip:端口/工程路径/aaa/资源
cookie1 会发送给服务器
cookie2 会发送给服务器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cookie作业布置

在这里插入图片描述
在这里插入图片描述

Cookie注意事项

  1. 一个Cookie只能标识一种信息, 它至少含有一个标识该信息的名称(Name)和设置值(Value)
  2. 一个Web站点可以给一个浏览器发送多个Cookie, 一个浏览器也可以存储多个Web站点提供的Cookie
    在这里插入图片描述
  3. Cookie总的数量没有限制, 但是每个域名的Cookie数量和每个Cookie的大小是有限制的(不同的浏览器限制不同), Cookie不适合存放数据量大的信息

Cookie中文乱码问题

如果存放中文的cookie, 会报错, 可以通过url编码和解码解决
在这里插入图片描述
在这里插入图片描述

Session技术

  1. Session是服务器端技术, 服务器在运行时会为每一个用户的浏览器创建一个其独享的session对象/集合
  2. 由于session为各个用户浏览器独享, 所以用户在访问浏览器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相应任务

Session原理示意图

  1. 当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占
  2. 这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改
    在这里插入图片描述
  • session可以做什么?
    • 网上商城的购物车
    • 保存登陆用户的信息
    • 将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据
    • 防止用户非法登录到某个页面
  • Session存储结构示意图

在这里插入图片描述

  1. 你可以把Session看作是一种容器类似HashMap, 有两列(K-V), 每一行就是session的一个属性.
  2. 每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object)

Session常用方法

  1. 创建和获取Session
    HttpSession hs = request.getSession()
    第一次调用是创建Session会话, 之后调用是获取创建好的Session对象
  2. 向session添加属性
    js.setAttribute(String name, Object obj)
  3. 从session得到某个属性
    Object obj = hs.getAttribute(String name)
  4. 从session删除某个属性
    hs.removeAttribute(String name)
  5. isNew();
    判断是不是刚创建出来的Session
  6. 每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值

Session底层机制

项目重新发布Session会清空
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Session生命周期

Session生命周期说明

  1. public void setMaxInactiveInterval(int interval), 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁
  2. 值为正数的时候, 设定Session的超时时长
  3. 负数表示永不超时
  4. public int getMaxInactiveInterval()获取Session的超时时间
  5. public void invalidate() 让当前Session会话立即无效
  6. 如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置
    在这里插入图片描述
  7. Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算
  8. 底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁

Session生命周期实例

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
解读: Session的生命周期

  1. 指的是两次访问session的最大间隔时间
  2. 如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期
  3. session是否过期, 是由服务器来维护和管理
  4. 如果我们调用了invalidate(), 会直接将该session删除/销毁
  5. 如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)

Session作业

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

JavaWeb系列十一: Web 开发会话技术(Cookie, Session)

韩sir Cookie技术Cookie简单示意图Cookie常用方法Cookie创建Cookie读取JSESSIONID读取指定Cookie Cookie修改Cookie生命周期Cookie的有效路径Cookie作业布置Cookie注意事项Cookie中文乱码问题 Session技术Session原理示意图Session常用方法Session底层机制Session生命周期Sessi…...

【激光雷达使用记录】—— 如何在ubuntu中利用ros自带的rviz工具实时可视化雷达点云的数据

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、查看雷达数据的 frame_id1. 查看雷达数据的话题2. 查看数据的frame_id 二、可视化雷达数据总结 前言 RViz(ROS Visualization)是机…...

运行项目报错(java: 无效的目标发行版: 17)项目jdk版本不兼容,修改Java编译器配置

...

一道session文件包含题

目录 环境说明 session文件包含getshell 审计源码 session包含 base64在session中的解码分析 题目: 链接:https://pan.baidu.com/s/1Q0BN08b8gWiVE4tOnirpTA?pwdcate 提取码:cate 环境说明 这里我用的是linux,也可以用p…...

vuex数据持久化

清空原因: 刷新页面vuex的数据会丢失属于正常现象,因为JS的数据都是保存在浏览器的堆栈内存里面的,刷新浏览器页面,以前堆栈申请的内存被释放,这就是浏览器的运行机制,那么堆栈里的数据自然就清空了。 解…...

MySQL之复制(十)

复制 改变主库 确定期望的日志位置 如果有备库和新主库的位置不相同,则需要找到该备库最后一条执行的时间在新主库的二进制日志中相应的位置,然后再执行CHANGE MASTER TO.可以通过mysqlbinlog工具来找到备库执行的最后一条查询,然后在主库上…...

Spring MVC数据绑定和响应——简单数据绑定(一)默认类型数据绑定

一、Spring MVC常见的默认类型 当使用Spring MVC默认支持的数据类型作为处理器的形参类型时,Spring MVC的参数处理适配器会默认识别这些类型并进行赋值。Spring MVC常见的默认类型如下所示。 • HttpServletRequest:获取请求信息。 • HttpServlet…...

短视频平台自动化插件编写需要用到的源代码分享!

随着短视频平台的蓬勃发展,自动化插件的需求也日益增长,这些插件能够帮助用户更高效地管理内容、分析数据、优化发布策略等。 一、登录验证模块 登录验证是自动化插件的基础功能之一,确保用户能够安全地访问平台并执行相关操作,…...

安卓下载以来总是要添加maven下载地址,放在哪?

放这里面的 repositories 里...

springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?

上一节我们简单阐述了springboot多数据源如何配置。在实际的业务场景中我们常常遇到A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库中。为何要这么做呢?比如B服务是日志SDK,A服务集成B服务来实现记录日志的功能,但是日…...

20240626 每日AI必读资讯

🌍警告!OpenAI宣布全面封锁中国API接入! - 7月9号开始封锁不支持的国家API - 如果在OpenAI不允许的国家使用其 API 将面临封杀 🔗 警告!OpenAI 宣布全面封锁中国 API 接入-CSDN博客 🎵索尼、环球音乐、华…...

C语言经典算法题第一题

题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔 子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数 为多少&#xff1f; #include <stdio.h>int main() …...

计算预卷积特征

当冻结卷积层和训练模型时&#xff0c;全连接层或dense层(vgg.classifier)的输入始终是相同的。为了更好地理解&#xff0c;让我们将卷积块(在示例中为vgg.features块)视为具有了已学习好的权重且在训练期间不会更改的函数。因此&#xff0c;计算卷积特征并保存下来将有助于我们…...

Python 入门 —— 描述器

Python 入门 —— 描述器 文章目录 Python 入门 —— 描述器描述器简单示例定制名称只读属性状态交互验证器类自定义验证器验证器的使用 对象关系映射 描述器 前面我们介绍了两种属性拦截的方式&#xff1a;特性&#xff08;property&#xff09;以及重载属性访问运算符&#…...

测试驱动开发TDD

如何在后端测试代码&#xff0c;测试一个其前端的请求&#xff0c;能否正常处理 以登录请求为例 package com.example.demo.login;import com.example.demo.login.pojo.User; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import…...

[论文笔记]Mixture-of-Agents Enhances Large Language Model Capabilities

引言 今天带来一篇多智能体的论文笔记&#xff0c;Mixture-of-Agents Enhances Large Language Model Capabilities。 随着LLMs数量的增加&#xff0c;如何利用多个LLMs的集体专业知识是一个令人兴奋的开放方向。为了实现这个目标&#xff0c;作者提出了一种新的方法&#xf…...

Redis 7.x 系列【6】数据类型之字符串(String)

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 GETSET2.6 STRLEN2.7 SETEX2.8…...

指针(一)

指针基础 在C中&#xff0c;指针是至关重要的组成部分。它是C语言最强大的功能之一&#xff0c;也是最棘手的功能之一。 指针具有强大的能力&#xff0c;其本质是协助程序员完成内存的直接操纵。 指针&#xff1a;特定类型数据在内存中的存储地址&#xff0c;即内存地址。 …...

harmony鸿蒙下实现bc交互的方式和方法

前言 最近在研究harmony操作系统下的交互&#xff0c;因此写一篇文章记录一下。 解决的问题 本篇文章主要是来写解决如果兼容android或者ios的交互&#xff0c;这样子避免h5页面的二次开发&#xff0c;节省资源。 交互的种类 交互对于harmony来说其实只有一种&#xff0c;…...

【MySQL进阶之路 | 高级篇】索引的声明与使用

1. 索引的分类 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;单列索引和空间索引. 从功能逻辑上说&#xff0c;索引主要分为普通索引&#xff0c;唯一索引&#xff0c;主键索引和全文索引.按物理实现方式&#xff0c;索引可以分为聚簇索引…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...