第 1 章 简介
1. 广义的session
中文名称会话,Http客户端和Http服务器开始通信,就会产生会话,会话过程是可以连续的,也可以是时断时续的,它会有一个时间范围,表象就是你登录一个网站,如果长时间未登录,网站会提示你,这就是对session的一种应用。
2. JavaEE中的session
JavaEE规范中,session被定义为一个具体的接口,javax.servlet.http.HttpSession,这个接口最终由符合JavaEE规范的应用服务器来实现,如我们最常用的Tomcat、Weblogic、Websphere等,session通常是存储在服务器内存中的(也有其它存储方式,但这里只讨论这种情况),也就是说session是服务器创建的,而不是浏览器创建的(刚开始学习时,老师经常这么说,可能也是为了方便理解)。
第 2 章 生命周期
从无到有,从有到无。
1. session的创建
1.1. session是服务器创建的对象,放在服务器内存中,那它是什么时候创建的?
以Tomcat为例,当使用浏览器访问一个jsp时,Tomcat会先根据jsp生成java文件,再编译成class,最后运行,输出内容到浏览器,浏览器解析呈现给用户。java和class文件会放到<Tomcat安装目录>/work/Catalina/localhost/<你的应用>/org/apache/jsp/<相应包>下,比如你有个test.jsp,那么就会生成test_jsp.java文件。打开test_jsp.java,找到其_jspService方法,会看到声明了一些我们常说的jsp内置对象。
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
JspWriter out = null;
再往下看,会看到有一句session = pageContext.getSession();,这里生成了session对象,也就是说,访问jsp时,服务器自动生成了session对象(可以在jsp的page声明中加入session="false",禁用session)。
1.2. 服务器生成session后,浏览器下次访问,服务器怎么判断session?
启动一个应用,访问一个jsp,这里以我本地的为例。
初次访问服务器上的一个jsp,服务器在响应头中设置了临时cookie,并加上了一JSESSIONID(毋庸置疑,肯定是服务器给加上的,Tomcat具体代码我没有去找)。
第二次访问jsp:
浏览器将存储JSESSIONID的cookie随着请求一起发送到服务器,服务器通过JSESSIONID到内存中找到上次生成的session对象,从而实现客户端(浏览器)共享session。JSESSIONID也可以拼在url上,如http:///localhost:8080/testApp/test.jsp;JSESSIONID=XXXXXXXXXXXX?param1=value1,JSESSIONID可以通过request.getSession().getId()得到,url中如果有JSESSIONID,服务器就不会从cookie中取了。
注:浏览器多个tab之间(同一域下)共享session,实际上就是临时cookie都一样,JSESSIONID都是一个。而多个窗口之间使用不同的cookie不一样,所以不能共享session。
2. session的销毁
2.1. session在服务器创建后,什么时候会消失呢?
服务器被强制关闭,肯定啥都没有了,这要看服务器具体的实现,像Tomcat正常关闭(使用shutdown,而不是X掉)的话,是会对session序列化到硬盘上的,重新启动后,会读取,原有的session依然存在。
程序中调用session.invalidate(),销毁当前session方法。
session超时,超时指的是服务器连续一段时间内(超出了应用中设置的最低时限)没有接收到session所在客户端的请求,服务器从内存中移除该session对象。
2.2. 浏览器窗口关闭,session会消失吗?
老师通常这么告诉,很多书中也这样讲,真是偷换概念,大错特错,浏览器关闭后,只是对应服务器session的JSESSIONID消失了,而服务器再也用不到这个session,导致超时,服务器会自动销毁。
注:本文中讨论的session只是存储在服务器内存的情况,诸如其它放在Cache中、分布式存储、持久化神马的,还没接触,也就没研究。
第 3 章 总结
session是消耗服务器内存的,所以要合理使用session,别什么东西都往session里放。
session是由服务器创建的,跟浏览器没有半毛钱关系,浏览器只是拿到一个JSESSIONID。
相关推荐
【session简介】 在Web开发中,session是一种关键的技术,用于在客户端和服务器之间保持状态。...2. 《Java Web编程中的session深入解析》 3. 《HTTP协议详解》 4. 《Cookie与Session机制比较研究》
通过本文的深入解析,你应该能够理解Cookie和Session的区别,并根据具体需求选择合适的状态管理策略。 Cookie和Session是Java Web应用中两种重要的状态管理机制,它们各有特点和适用场景。合理选择和使用这两种机制...
本文将深入探讨Session的工作原理、SessionID与Cookie的关系,以及在.NET平台下搭建Session服务器的不同方法。 首先,让我们理解Session、SessionID和Cookie的基本概念。Session是一种在服务器端存储用户特定数据的...
【Hibernate注释深入解析】 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注释是一种强大的工具,可以简化配置,使得代码更加简洁...
本资源"ASP.NET 深入解析(PDG)"似乎是一份详细讲解ASP.NET技术的教程或指南,涵盖了该领域的核心概念和高级特性。 在ASP.NET中,开发人员可以使用多种编程语言,如C#、VB.NET等,通过标记语言(如HTML、ASP.NET控件...
"深入解析Session工作原理及运行流程" Session是Web应用程序中的一种常见技术,用于维持服务器端的数据存储。下面我们将深入解析Session的工作原理及运行流程。 Session的概念和特点 Session是指在计算机中,...
本篇文章将根据提供的资料,深入解析Oracle DBA的入门、进阶及诊断案例。 一、Oracle DBA入门 1. 数据库概念:理解数据库的基本构成,如表空间、数据文件、控制文件、重做日志、实例等。 2. 安装与配置:学习如何在...
深入探讨Session机制:IntraWeb框架下的Session管理与应用 标题和描述中提及的知识点主要集中在IntraWeb框架中Session的实现与管理机制。Session在Web应用开发中扮演着至关重要的角色,它允许服务器为每个用户保持...
本篇文章将深入解析ASP.NET的关键概念、核心组件以及实际应用中的重要技术。 一、ASP.NET概述 ASP.NET不仅仅是一个编程语言,而是一整套用于构建动态网站、Web服务和富互联网应用(RIA)的平台。它支持多种编程模型...
本文将深入解析这三者的概念、特点以及它们之间的关系。 1. HttpServletRequest request对象: request对象代表一个HTTP请求,它是每次用户与服务器交互时产生的。它存储的是请求相关的数据,如请求参数、请求头等...
当用户第一次访问使用Session的网页时,服务器会生成一个Session ID,并通过Set-Cookie响应头将其存储在用户的Cookie中。在随后的请求中,浏览器会在请求头中携带这个Session ID,使得服务器能够识别并关联到相应的...
这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与数据库交互的接口,它扮演着应用程序与数据库之间的桥梁角色。与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`...
本篇文章将深入探讨Session的工作原理、类型以及如何在不同编程语言中使用。 首先,我们需要理解Session的基本概念。当用户打开一个网站并登录时,服务器会为该用户创建一个唯一的Session ID,这个ID通常通过Cookie...
本文将围绕如何获取SessionID展开讨论,并通过示例代码深入解析其工作原理。 #### 一、Session简介 1. **概念**:Session是服务器端技术,它通过在服务器上保存用户的信息来识别不同的用户会话。 2. **作用**:...
本文将深入剖析Express-Session的源码,揭示其工作原理,并探讨如何在实际项目中高效利用。 一、Express-Session概述 Express-Session的核心功能在于为每个用户创建一个唯一的session ID,这个ID存储在客户端的...
《深入解析Tomcat》这本书是Java Web开发领域的一本经典之作,由曹旭东翻译,提供了对Apache Tomcat服务器的全面、深入的理解。Tomcat是一款轻量级的应用服务器,广泛用于部署Servlet和JSP应用。以下是对这本书内容...
#### 一、Session概念解析 在深入探讨PHP中Session的具体用法之前,我们首先需要理解Session到底是什么以及它为何如此重要。 **1.1 Session的基本定义** Session是一种用来追踪用户与服务器之间交互的技术,类似...
本文将深入探讨SpringSession如何支持Cookie和header策略,并解析`CookieHeaderHttpSessionStrategy.java`这个文件中的关键概念和技术细节。 首先,我们来看标题提及的“SpringSession同时支持Cookie和header策略”...