Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析

Java-servlet(九)前端会话,会话管理与Cookie和HttpSession全解析

  • 前言
    • 一、什么是会话
    • 二、会话管理
      • 1. 隐藏的表单域
      • 2. 网址重写
      • 3. 使用 Cookie
        • 3.1 Cookie 的工作流程
        • 3.2 Java 中的方法,Cookie 类
    • 三、Cookie 的实现
      • 1. 创建 Cookie
      • 2. 添加 Cookie
      • 3. 读取 Cookie
    • 四、实现 HttpSession
    • 五、处理错误
      • 1. 发送错误
      • 2. 自定义错误页面


前言

  • 在 Web 开发中,会话管理是实现用户状态跟踪的核心技术
  • 想象一个场景:用户登录网站后添加商品到购物车,切换页面时购物车数据需要保持;用户退出后,系统需清除其相关状态。
  • 这些需求都依赖会话管理技术实现
  • 本文将从会话基本概念入手,逐步解析四种主流会话管理方案隐藏表单域、URL 重写、Cookie 和 HttpSession,通过对比分析帮助你选择最合适的技术方案

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482


在这里插入图片描述

一、什么是会话

会话是指在一段时间内,用户与应用程序之间的交互过程

  • 在 Web 应用中,会话可以理解为用户从打开浏览器访问网站开始,到关闭浏览器结束的整个过程

以购物车为例,当用户在电商网站上挑选商品并添加到购物车时,这个过程就涉及到会话管理。网站需要识别是哪个用户在操作购物车,并且在用户的整个购物过程中保存购物车中的商品信息,直到用户完成购物或者关闭浏览器

二、会话管理

会话管理的目的是在多个请求之间跟踪用户的状态。下面介绍几种将 useridservlet2 传到 servlet3 的方法:

1. 隐藏的表单域

  • 隐藏的表单域是一种在 HTML 表单中使用隐藏字段来传递数据的方法
  • 这些字段在页面上不可见,但它们的值会随着表单一起提交到服务器
<!DOCTYPE html>
<html>
<head><title>Hidden Form Field Example</title>
</head>
<body><form action="servlet3" method="post"><input type="hidden" name="userid" value="123"><input type="submit" value="Submit"></form>
</body>
</html>

在这个例子中,userid 被隐藏在表单中,当用户点击提交按钮时,userid 的值会被发送到 servlet3

  • 优点:简单易用,不需要额外的配置。
  • 缺点:只能用于表单提交,并且数据会暴露在 HTML 源代码中,安全性较低。
  • 使用场景:当需要在表单提交时传递少量数据,且对数据安全性要求不高时可以使用。

2. 网址重写

网址重写是指在 URL 后面附加参数来传递数据。

// 在 servlet2 中
response.sendRedirect("servlet3?userid=123");

在这个例子中,userid 作为参数附加在 servlet3 的 URL 后面,当用户访问这个 URL 时,userid 的值会被传递到 servlet3

  • 优点:简单直接,不需要额外的配置
  • 缺点:数据会暴露在 URL 中,安全性较低,并且 URL 的长度有限制
  • 使用场景:当需要在页面跳转时传递少量数据,且对数据安全性要求不高时可以使用

3. 使用 Cookie

在这里插入图片描述

Cookie 是由应用程序服务器存储在客户端浏览器的小文件,用于追踪所有用户

3.1 Cookie 的工作流程
  1. 服务器在响应头中设置 Set-Cookie 字段,将 Cookie 信息发送给客户端浏览器。
  2. 客户端浏览器接收到响应后,会将 Cookie 信息存储在本地。
  3. 当客户端浏览器再次向服务器发送请求时,会在请求头中包含 Cookie 字段,将存储的 Cookie 信息发送给服务器。
  4. 服务器接收到请求后,会从请求头中读取 Cookie 信息,从而识别用户。
3.2 Java 中的方法,Cookie 类

在 Java 中,可以使用 javax.servlet.http.Cookie 类来创建、管理和读取 Cookie。

三、Cookie 的实现

在这里插入图片描述

1. 创建 Cookie

// 在 servlet2 中
Cookie userIdCookie = new Cookie("userid", "123");

2. 添加 Cookie

// 在 servlet2 中
response.addCookie(userIdCookie);

3. 读取 Cookie

// 在 servlet3 中
Cookie[] cookies = request.getCookies();
if (cookies != null) {for (Cookie cookie : cookies) {if ("userid".equals(cookie.getName())) {String userId = cookie.getValue();// 使用 userId 进行后续操作}}
}
  • 优点:可以在多个页面之间共享数据,并且可以设置 Cookie 的有效期和作用域
  • 缺点:数据会存储在客户端浏览器中,安全性较低,并且 Cookie 的大小有限制
  • 使用场景:当需要在多个页面之间共享少量数据,且对数据安全性要求不高时可以使用

四、实现 HttpSession

HttpSession 是 Java Servlet 提供的一种会话管理机制,它允许在多个请求之间跟踪用户的状态。

// 在 servlet2 中
HttpSession session = request.getSession();
session.setAttribute("userid", "123");// 在 servlet3 中
HttpSession session = request.getSession(false);
if (session != null) {String userId = (String) session.getAttribute("userid");// 使用 userId 进行后续操作
}
  • 优点:数据存储在服务器端,安全性较高,并且可以存储任意类型的数据。
  • 缺点:需要占用服务器的内存资源,并且在分布式环境中需要进行额外的配置。
  • 使用场景:当需要在多个请求之间跟踪用户的状态,并且对数据安全性要求较高时可以使用。

五、处理错误

1. 发送错误

在 Servlet 中,可以使用 response.sendError 方法发送错误信息。

response.sendError(HttpServletResponse.SC_NOT_FOUND, "Page not found");

2. 自定义错误页面

可以在 web.xml 中配置自定义错误页面。

<error-page><error-code>404</error-code><location>/404.jsp</location>
</error-page>
<error-page><error-code>500</error-code><location>/500.jsp</location>
</error-page>

当发生 404 或 500 错误时,会自动跳转到相应的错误页面。

综上所述,会话管理技术有隐藏的表单域、网址重写、使用 Cookie 和 HttpSession 等。每种技术都有其优缺点和适用场景,在实际开发中需要根据具体需求选择合适的会话管理技术。

会话管理技术作用优点缺点使用场景
隐藏的表单域在表单提交时传递数据,如将 useridservlet2 传到 servlet3简单易用,无需额外配置只能用于表单提交,数据暴露在 HTML 源代码中,安全性低表单提交时传递少量数据,对安全性要求不高
网址重写在页面跳转时传递数据,如在 URL 后附加 userid 传递到 servlet3简单直接,无需额外配置数据暴露在 URL 中,安全性低,URL 长度有限制页面跳转时传递少量数据,对安全性要求不高
使用 Cookie在多个页面间共享数据,服务器可通过 Cookie 追踪用户可在多页面共享数据,能设置有效期和作用域数据存于客户端,安全性低,Cookie 大小有限制多页面间共享少量数据,对安全性要求不高
HttpSession在多个请求间跟踪用户状态,可存储任意类型数据数据存于服务器端,安全性高占用服务器内存资源,分布式环境需额外配置多个请求间跟踪用户状态,对安全性要求较高

以上就是这篇博客的全部内容,下一篇我们将继续探索 Java-servlet 的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

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

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

相关文章

uniapp开发中store的基本用法和模块化详解

在 UniApp 开发中,状态管理是非常重要的一部分,尤其是在复杂的应用场景下。Vuex 是 Vue.js 的官方状态管理库,可以帮助开发者集中管理应用的状态数据。UniApp 作为基于 Vue.js 的跨平台开发框架,也支持使用 Vuex 进行状态管理。 以下是关于 Vuex 在 UniApp 中的详细用法介…

手写数据库MYDB(一):项目启动效果展示和环境配置问题说明

1.项目概况 这个项目实际上就是一个轮子项目&#xff0c;现在我看到的这个市面上面比较火的就是这个首先RPC&#xff0c;好多的机构都在搞这个&#xff0c;还有这个消息队列之类的&#xff0c;但是这个是基于MYSQL的&#xff0c;我们知道这个MYSQL在八股盛宴里面是重点考察对象…

基于Spring Boot的电动车智能充电服务平台的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【AI学习】人工神经网络

1,人工神经网络(Artificial Neural Networks,ANNs,连接模型,Connection Model) 模仿动物神经网络行为特征(突触联接的结构),进行分布式并行信息处理的算法数学模型。依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。 2,前馈神…

场馆预约小程序的设计与实现

摘 要 时代在进步&#xff0c;人们对日常生活质量的要求不再受限于衣食住行。现代人不仅想要一个健康的身体&#xff0c;还想拥有一身宛如黄金比例的身材。但是人们平常除了上下班和上下学的时间&#xff0c;其余空余时间寥寥无几&#xff0c;所以我们需要用体育场馆预约来节省…

笔记:纯真IP库

最近需要使用到ip解析成对应的地域&#xff0c;查找了一些资料&#xff0c;发现纯真ip库&#xff0c;这个比较好用&#xff0c;而且社区版可以获得免费授权。 纯真ip库官网地址&#xff1a;https://www.cz88.net/ python版本git地址&#xff1a;https://github.com/tagphi/cz…

骨密度以及骨密度测量,测量方案,意义;提高;实现方案

骨密度及骨密度测量 骨密度&#xff08;Bone Mineral Density, BMD&#xff09; 是指骨骼单位体积或单位面积内矿物质&#xff08;主要是钙和磷&#xff09;的含量&#xff0c;是评估骨骼强度的重要指标。骨密度降低可能导致骨质疏松&#xff0c;增加骨折风险。 简单分析效果&…

MySQL 体系结构与存储引擎

目录 一、MySQL 体系结构 1. 连接层 (Connection Layer) 2. 服务层 (Server Layer) 3. 存储引擎层 (Storage Engine Layer) 二、MySQL 核心存储引擎比较 1. InnoDB (默认引擎) 2. MyISAM 3. Memory (HEAP) 4. 其他存储引擎 三、InnoDB 存储引擎深度解析 1. 核心架构组…

知识就是力量——物联网应用技术

基础知识篇 一、常用电子元器件1——USB Type C 接口引脚详解特点接口定义作用主从设备关于6P引脚的简介 2——常用通信芯片CH343P概述特点引脚定义 CH340概述特点封装 3——蜂鸣器概述类型驱动电路原文链接 二、常用封装介绍贴片电阻电容封装介绍封装尺寸与功率关系&#xff1…

vue复习1~45

1.关于vue 要理解记忆规则&#xff0c;可以到官网上去找 vue的两种使用方式 vue核心包开发 场景&#xff1a;局部模块改造vue核心包 & vue插件 工程化开发 场景&#xff1a;整站开发 2.创建vue实例 构建用户页面->创建vue实例初始化渲染 学习阶段用开发版本 3.插值…

Netty和Project Reactor如何共同处理大数据流?

在处理大数据流时&#xff0c;Netty和Project Reactor可以协同工作&#xff0c;充分利用Netty的高性能非阻塞IO和Project Reactor的响应式编程模型&#xff0c;实现高效的数据处理和背压控制。以下是如何共同处理大数据流的详细步骤和示例代码&#xff1a; ### 1. Netty和Proj…

【Nginx】location匹配模式与规则

文章目录 一、环境二、匹配模式1. 精准模式2. 前缀模式&#xff08;不继续匹配正则&#xff09;3. 前缀模式&#xff08;继续匹配正则&#xff09;4. 正则模式&#xff08;大小写敏感&#xff09;5. 正则模式&#xff08;大小写不敏感&#xff09; 三、需要注意的地方1. 命中多…

JavaScript基础-定时器

在Web开发中&#xff0c;有时我们需要延迟执行某些操作或者定期重复执行某段代码。JavaScript提供了强大的定时器功能&#xff0c;使得这些需求变得简单易行。本文将详细介绍JavaScript中的定时器&#xff0c;包括setTimeout和setInterval函数的使用方法、注意事项以及一些实际…

【Python】and 和 or 的返回值

文章目录 选项 A选项 B选项 C选项 D正确答案 以下哪些选项输出结果为True ( ) A、print(2 0 or True) B、print(2 ! 0 or True) C、print(str(2) and str(0) or True) D、print(str(2) or str(0) or True)要确定哪些选项的输出结果为 True&#xff0c;我们需要分析每个表达式的…

【deepseek 学c++】weakptr引用场景

std::weak_ptr 是 C 中与 std::shared_ptr 配合使用的智能指针&#xff0c;它本身不拥有资源的所有权&#xff0c;仅观察资源的状态&#xff0c;主要用于解决 shared_ptr 的循环引用问题和临时访问共享资源的需求。以下是 weak_ptr 的典型应用场景和核心价值&#xff1a;![ 为…

新手SEO优化实战快速入门

内容概要 对于SEO新手而言&#xff0c;系统化掌握基础逻辑与实操路径是快速入门的关键。本指南以站内优化为切入点&#xff0c;从网站结构、URL设计到内链布局&#xff0c;逐层拆解搜索引擎友好的技术框架&#xff1b;同时聚焦关键词挖掘与内容策略&#xff0c;结合工具使用与…

如何用Redis统计网站的UV

在 Java 项目中使用 Redis 统计网站的 UV&#xff08;独立访客数&#xff09;&#xff0c;我们可以利用 Redis 提供的 HyperLogLog 数据结构。HyperLogLog 适合用来做基数统计&#xff0c;它在空间复杂度上非常高效&#xff0c;可以在存储大量数据的情况下&#xff0c;提供非常…

Android系统的安全问题 - Android的启动时验证

Android 启动时验证&#xff08;Verified Boot&#xff09; Android 的 启动时验证&#xff08;Verified Boot&#xff09; 是一项关键安全机制&#xff0c;用于确保设备启动过程中加载的所有系统镜像&#xff08;如 Bootloader、内核、系统分区&#xff09;未被篡改&#xff…

【操作系统】(四)体系结构

&#xff08;一&#xff09;大内核与微内核 把橘色部分划分到内核中的操作系统属于大内核&#xff0c;不把橘色划到内核中的操作系统属于微内核 大内核与微内核的具体区别&#xff1a; &#xff08;二&#xff09;计算机的层次结构 &#xff08;三&#xff09;操作系统内核非内…

Kotlin 协程官方文档知识汇总(一)

1、协程基础 Kotlin 是一门仅在标准库中提供最基本底层 API 以便其他库能够利用协程的语言。与许多其他具有类似功能的语言不同&#xff0c;async 与 await 在 Kotlin 中并不是关键字&#xff0c;甚至都不是标准库的一部分。此外&#xff0c;Kotlin 的挂起函数概念为异步操作提…