[Servlet]会话追踪技术

深入理解HTTP协议与Servlet会话管理 本文深入探讨了HTTP协议的基本概念以及Servlet会话管理的重要性。通过分析HTTP协议的工作机制,包括其请求/响应模型和如何使用HTTPServlet进行Web通信,我们了解了HTTP的无状态特性。文章还详细介绍了多种会话跟踪技术,如URL重写、隐藏表单字段、Cookies和HTTPSession接口,并通过实例展示了它们的实际应用。 阅读详情

Session管理

Session管理也即是Session追踪(会话追踪)。因为HTTP是无状态的,所以WEB服务器无法知道HTTP这个请求是否访问过。
对于Session保持状态,有4种方法:

  • URL重写
  • 隐藏域
  • cookie
  • HttpSession对象

URL重写

URL重写是种Session追踪技术,需要将一个或者多个token作为查询字符串添加到一个url中。
token的格式一般为键 = 值:
url?key1=value1&key2=value2&...&keyn=valuen
如果token不经过过多的URL四处携带,那么URL重写就比较合适。有些浏览器设置禁用cookie可以使用。
缺点:

  • Web浏览器对URL限制2000个字符
  • URL重写对于静态页面比较费力
  • URL重写必须在服务器端有效。所有链接必须带值。
  • 某些字符,如&,空格等需要进行转码
  • 添加到URL部分的toke是可见的,所以这些token不能携带重要信息

隐藏域

利用隐藏域来保持状态与URL重写技术类似,但是不会将值添加到URL的后面。而是放在html表单的隐藏域中。这就技术可以提交更多的token。在不需要跨多个页面时,才适合使用这种技术。
缺点:请求必须是表单所发出的。

与URL重写和隐藏域都只适用于保持不需要跨越页面的信息,如果这些信息需要跨很多页面,那么就很难实现了。cookie可以解决URL重写和隐藏域无法解决的问题。
cookie自动的在Web服务器和浏览器间传递信息。cookie是作为HTTP标签头嵌入的,传输是由HTTP协议处理。除此以外cookie还可以设置有效期限。对于Web浏览器,每个Web服务器最多可以设置20个cookie。
缺点:用户可以设置是否禁用cookie
如果浏览器是第一次访问Web服务器,那么可以通过
Cookie cookie = new Cookie("name", "value");
然后将其添加到response,返回给Web浏览器,事实上可以完全不是浏览器。
resp.addCookie(cookie);
当浏览器再次发送对统一资源或者是同一服务器请求时,浏览器会把之前Web服务器发过来的cookie传回去。cookie也可以通过JavaScript创建和删除。
如果要访问cookie,可以在调用HttpServletRequest的getCookies()方法,然后返回一个cookie数组。比如如何读取userName的cookie

Cookie[] cookies = request.getCookies();
Cookie userNameCookie = null;
if(cookies != null) {
    for(Cookie cookie : cookies) {
        if(cookie.getName().equals("userName")) {
            userNameCookie = cookie;
            break;
        }
    }
}

HttpServletResonse类并没有提供removeCookie()等类似的方法,对于cookie的操作方式也只有一种addCookie(),那么如何移除掉cookie?
cookie自身的属性中,有一个maxAge,这是用来决定cookie的有效期。
如果要使的cookie无效,只要将去这个cookie的maxAge值设置为0,然后添加给response。

userNameCookie.setMaxAge(0);
resp.addCookie(userNameCookie);

需要注意的事,cookie是保存在浏览器的,即客户端。

HttpSession对象

在所有session追踪技术中,HttpSession对象是最强大的,功能多。HttpSession在用户第一次访问某个网站自动创建,通过HttpServletRequest的getSession()方法,可以获得用户的HttpSession。
getSession() 有两个重载的方法:
HttpSession getSession()
HttpSession gerSession(boolean create)

无参的getSession()返回当前的session,没有则创建一个返回。
有参数的getSession(boolean..) 根据设置的boolean值来决定,在没有时,是否创建session。true的时候,创建返回。false的时候返回null。
可以使用getAttribute(key)/setAttribute(key,obj) 来获得回话信息。与之前的三种session追踪技术不同的是,HttpSession是保存在Web服务器端,所以是耗费内存的。所以只能将尽可能小的对象放入其中,对于保存在HttpSession里面的内容一定要慎重。现代的Servlet容器可以在内存即将满时,将HttpSession对象移到辅助设备,但是同样会影响部分性能。
添加进HttpSession中的值可以是任何对象。可以选择实现java.io.Serializable接口,以便必要时候序列化对象保存到辅助设备。
既然之前说的,HttpSesion是保存在Web服务器端的,并且由于HTTP是无状态的,所以无法记得上一次请求和这一次请求是否同一用户。那么HttpSession的原理是什么呢?
Servlet容器会为其每一个HttpSession创建一个唯一的表示符,并且将这个token发送给浏览器。在Tomcat容器中,会生成一个名为JESSIONID的cookie,或者使用URL重写技术添加至URL中。
同cookie一样的是,HttpSession也可以通过调用invalidate()方法强制是的Session过期,然后将Session绑定的对象解除绑定。
默认情况下,HttpSession会在用户静默一段时间后过期,可以通过WEB部署文件中设置session-timeout来设置session的过期时间。在Servlet中同样可以通过HttpSession的setMaxInactiveInter(int seconds)来设置过期时间。之前cookie可以通过设置0来使的cookie无效,但是HttpSession将seconds设置为0则使的session永远不会过期。

基于Servlet的会话跟踪理解会话跟踪原理 基于Servlet的会话跟踪理解会话跟踪原理 会获取session对象 会使用session对象进行数据存取 立即下载

相关推荐

envi反演水质参数_遥感水质反演之反演模型

水质反演的框架图此为反演模型的章节第一部分,统计学基础:概率论、矩阵和数理统计的知识统计学知识框架# 1 基本统计概念知识在于应用,而非记忆!我们都是在样本的层面去操作数据的,以达到对总体性质的估计和推断,拿到一组数据首先进行基本的统计描述,常用的有:样本均值: 样本方差(调整方差)不是除以n,而是n-1, 标准差为样本方差开方即可皮尔逊积矩相关系数(简称相关系数): 相关系数范围在[-1,...

weixin_35275922的博客 3227

Servlet(三)会话跟踪技术

一、概述会话技术:就是一次谈话,在Web浏览器跟服务器的一次通信,那这次通信可以包含多次请求和多次响应功能:在多次请求和多次响应间共享数据,记录信息确定用户身份会话的结束标志:浏览器关闭,或者服务器关闭了代表这次会话就结束分类:(1)客户端会话技术:数据由客户端来保存(2)服务端会话技术:数据由服务端来保存二、客户端的会话技术--Cookie(1)Cookie的由来(诞生)     HTTP的特点...

wzj_110的博客 2471

Matlab实战:12种优化算法在CEC2014测试集上的性能对比(附完整代码)

本文详细对比了12种优化算法在CEC2014测试集上的性能表现,包括PSO、DE、GA等主流算法。通过Matlab实现完整的实验流程,涵盖算法实现、参数设置、结果分析与可视化,为工程优化问题提供实用解决方案。特别关注收敛曲线和评价指标,帮助读者选择最适合特定场景的优化算法。

wine的专栏 681

Servlet会话跟踪技术

http协议是一个无状态协议,通过http发送的各个请求之间没有关联,如何涉及到各个请求之间的数据传递?针对以上的需求,在servlet包含四种会话跟踪技术: 1、URL重写 http://localhost/pro/query?key=查询关键字&page=1&temp=0.932345987981273 2、隐藏域技术 <input type="hidden" name="id" value="1"> 3、session session是用于存储客户端和服务端一次会话信息

YY2748的博客 711

ESP8266 + MQTT :如何实现 LED 灯的远程控制

MQTT 是轻量级的、灵活的物联网消息交换和数据传递协议,致力于为 IoT 开发人员实现灵活性与硬件/网络资源的平衡。 NodeMCU 是一个开源的物联网平台。它使用 Lua 语言编程。该平台基于eLua开源项目,底层使用ESP8266 sdk 0.9.5版本。 在此项目中我们将实现 NodeMCU(ESP8266) 与 EMQ X Cloud 运营和维护的免费公共 MQTT 服务器远程控制 LED 灯,并使用 Arduino IDE 来对 NodeMCU ESP8266 进行编程。 EMQ X Cloud

emqx_broker的博客 3357

Vue2项目实战:海康威视WEB无插件开发包V3.4从下载到多画面预览(附完整代码)

本文详细介绍了在Vue2项目中集成海康威视WEB无插件开发包V3.4实现多画面监控预览的完整实战方案。内容涵盖从开发包下载、Nginx代理配置、核心组件封装到多画面并发加载与性能优化的全流程,并提供了完整的代码示例,帮助开发者高效解决浏览器无插件播放与多路视频流加载的难题。

c7d8e9的博客 320

会话跟踪的四种方法

由于HTTP事务是无状态的,因此必须采取特殊措施是服务器在系列事务期间能继续确定和记住特定用户。实现此功能有两种基本方式:一是让客户端记住所有会话的相关数据并在必要时发回到服务器二时服务器保持所有数据,对其设置一个标识,让客户端记住该标识第二种方法更好,实现它的技术有四种:用隐藏字段():非常适合步需要大量数据存储的会话应用。具体使用??URL重写:URL可以在后面附加参数,和服务器的请求一起

andyjava2006的专栏 3411

PyCharm 2024最新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

Code_流苏:在代码中寻诗意,在实践中觅真知 4万+

Servlet--会话跟踪

HTTP是有一种无状态的协议,形象的说,就是大家在交流(发送/处理请求)的时候,无法识别谁在说话。 本文的前半部分会介绍基于CGI开发者使用的传统会话跟踪技术:用户鉴别、隐藏表单字段、URL重写和持续性cookie,后半段介绍Servlet API中对会话跟踪的内置支持。 本章主要介绍单服务器的状态,在《企业服务和J2EE》中将介绍多服务处理共享会话状态。用户鉴别在客户登陆进入后,servlet

阿丸笔记 509

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2096

Android BSP 开发深度解析:驱动开发、系统定制与调试实战

本文系统介绍了Android BSP开发的核心技术要点,重点探讨了外设驱动开发与调试方法。文章首先解析了Android系统分层架构和BSP的关键作用,详细阐述了Linux内核驱动开发基础,包括字符设备、平台设备和输入子系统驱动的实现方法。随后针对触摸屏、WIFI、蓝牙、USB、摄像头和屏幕等常见外设,深入分析了驱动开发要点和调试技巧。此外,还梳理了Android系统启动流程,介绍了常用调试工具和方法论,并提供了面试常见问题及参考答案。全文内容全面实用,为Android底层开发人员提供了系统的技术指南。

郑伟强dev的专栏 288

Servlet------第五章:状态的持久化/会话追踪技术/状态跟踪

http协议的访问是无状态的访问 当前的访问是不会知道之前访问的状态的. (http协议的访问是不会帮我们保存访问的记录/痕迹的)。 有些时候需要记录之前的访问状态 比如在购物网站的时候,第一次访问点击购买了一个手机,第二次访问点击购买了一个电脑,第三次访问点击购物车结算,这个时候我们就必须知道前俩次访问的时候购买了什么,要不然就没有方法去结算。所以我们就有了会话追踪技术来解决这个访问无状...

weixin_45122142的博客 228

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2812

Servlet之会话(Session)以及会话追踪技术(Cookie),(URL重写)和(隐藏表单域)...

Session 什么是会话? 会话: Web应用中的会话 指的是一个客户端浏览器与Web服务器之间连续发生的一系列请求和响应的过程 会话状态: Web服务器和浏览器在会话的过程中产生的状态信息 作用: 借助会话的状态,web服务器能够把同一个会话中的一系列的请求和响应过程关联起来,使得他们之间可以相互依赖和传递信息 创建会话: HttpservletRequest 中建立会话: HttpSess...

weixin_30758821的博客 311

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

servlet容器request、session、application以及cookie

1.servlet容器request /session/ application 1.1 这三种对象可以在服务器内部帮我们保存数据以及传递数据. 类型(接口) 对象名 HttpServletRequest request HttpSession session ServletContext application 1.2 doGet或者do...

weixin_44289032的博客 383

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Servlet与会话Bean 之间的关系 The Relationship Between Servlet and SessionBean

Servlet与会话Bean 的之间关系 今天终于通过《EJB 3.0专家编程》得知了Servlet 与 SessionBean 之间的关系。 原来Servlet 与 SessionBean 不是一回事。HTTP会话是关联一个会话id的数据的map。当应用请求创建一个会话时,服务器生成一个新的id,返回一个HTTPSession对象,应用可以用它来存储键/值数据对。然后它使...

weixin_30776863的博客 86

Servlet技术

Servlet技术 服务器端的 一段代码程序 一、什么是服务器? 硬件 + 软件 硬件: 计算机 --- 高性能电脑 软件: Tomcat 7版本 安装 解压缩 —> 安装路径尽量避免中文,以及特殊字符。 注意: Java环境 找不到jre_home路径? 使用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfPxKUAj-1594711223092)(E:\JavaWeb\Servlet

翰萨姆的博客 359

Servlet知识

一 : 引入servlet?和jsp?。 1,html属于静态页面 动态页面:数据的动态 form action="服务器地址"  html页面的数据发送到服务器表单  key value  input name="key" value="value" 2,html显示显示固定(动态页面->.jsp)   servlet : 接受数据     和数据库交互(对数据操作)

zxs123csdn的博客 554

JavaEE——Session会话追踪的实现机制

如果用户在一段时间内没有访问服务器,那么 Session 会自动失效,下次即使带着上次分配的 Session ID 访问,服务器也认为这是一个新用户,会分配新的 Session ID。使用 Session 时,由于服务器把所有用户的 Session 都存储在内存中,如果遇到内存不足的情况,就需要把部分不活动的 Session 序列化到磁盘上,这会大大降低服务器的运行效率,因此,放入 Session 的数据不能太大,否则会影响服务器的运行。session是一种将会话保存在服务器端的技术,用来跟踪用户。

qq_46853052的博客 729

servlet快速实战

servlet快速实战

zhouhe_的博客 437

java销毁servlet_java_servlet

1.什么是Servletservlet就是java里面一种类,只不过这种java类有一些特殊的应用,称呼他为servlet2.servlet的作用可以让浏览器直接通过一个路径取访问。(一般Java类做不到这一点)3.如何写一个servlet类3.1.三种实现方式:a.实现接口:javax.servlet.Servletb.继承一个抽象类:javax.servlet.GenericServletc....

weixin_31444279的博客 398

Servlet基础

转载自: Servlet总结 1,简介 定义: Servlet是在服务器上运行的程序,用来处理客户端的请求。 注意: init()方法和destroy()方法仅执行一次,在服务器装入Servlet 和卸载Servlet时执行,常用来管理服务器端资源,如初始化数据库连接和关闭数据库连接。 实现方法: 1>Servlet必须实现 javax.servle

helloworldhellobbboy的专栏 665

servlet和jsp的基本操作

web项目的目录结构      1.web项目的名字就是web项目的文件夹      2.web_test文件夹下面,必须要有一个固定的文件夹:WEB-INF      4.WEB-INF文件夹下面,有俩个固定的文件夹和一个固定的文件             文件夹:classes:编译好的class文件                     lib:web项目在运行的时候所需要的第三

zhaolxwork的博客 413

Servlet初步总结《2》

7.范围对象 1.范围对象 request 在同一个请求内有效 session 在同一个会话内有效 application 在同一个项目内有效 2.如何获取三种对象 1、request对象 方法中的request参数可以直接使用 2、session对象 HttpSession session = request.getSession(); (其中括号中默认为true:...

weixin_59350475的博客 278

JavaWeb

初始化方法,在Servlet被创建时执行,只执行一次提供服务方法,每次Servlet被访问,都会调用该方法销毁方法,当Servlet被销毁时,调用该方法,在内存释放或服务区关闭时销毁Servlet获取ServletConfig对象获取Servlet信息响应数据分为3部分1.响应行 HTTP/1.1 200 OKvoid setStatues(int sc):设置响应状态码2.响应头 Content-Type:text/html。

kebi_lh的博客 1873
上一篇: [Servlet]Servlet生命周期
下一篇: [Servlet]JSP和Servlet的关系,以及JSP语法
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值