`
tanzhen-1988
  • 浏览: 52666 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

session深入解析

阅读更多

第 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简介.doc

    【session简介】 在Web开发中,session是一种关键的技术,用于在客户端和服务器之间保持状态。...2. 《Java Web编程中的session深入解析》 3. 《HTTP协议详解》 4. 《Cookie与Session机制比较研究》

    深入解析:Java中Cookie与Session的区别及应用场景

    通过本文的深入解析,你应该能够理解Cookie和Session的区别,并根据具体需求选择合适的状态管理策略。 Cookie和Session是Java Web应用中两种重要的状态管理机制,它们各有特点和适用场景。合理选择和使用这两种机制...

    Session服务器配置指南与使用经验的深入解析

    本文将深入探讨Session的工作原理、SessionID与Cookie的关系,以及在.NET平台下搭建Session服务器的不同方法。 首先,让我们理解Session、SessionID和Cookie的基本概念。Session是一种在服务器端存储用户特定数据的...

    Hibernate注释深入解析

    【Hibernate注释深入解析】 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注释是一种强大的工具,可以简化配置,使得代码更加简洁...

    ASP.NET 深入解析(PDG)

    本资源"ASP.NET 深入解析(PDG)"似乎是一份详细讲解ASP.NET技术的教程或指南,涵盖了该领域的核心概念和高级特性。 在ASP.NET中,开发人员可以使用多种编程语言,如C#、VB.NET等,通过标记语言(如HTML、ASP.NET控件...

    深入解析Session工作原理及运行流程

    "深入解析Session工作原理及运行流程" Session是Web应用程序中的一种常见技术,用于维持服务器端的数据存储。下面我们将深入解析Session的工作原理及运行流程。 Session的概念和特点 Session是指在计算机中,...

    深入解析Oracle--DBA入门、进阶与诊断案例

    本篇文章将根据提供的资料,深入解析Oracle DBA的入门、进阶及诊断案例。 一、Oracle DBA入门 1. 数据库概念:理解数据库的基本构成,如表空间、数据文件、控制文件、重做日志、实例等。 2. 安装与配置:学习如何在...

    深入探討Session(IntraWeb)

    深入探讨Session机制:IntraWeb框架下的Session管理与应用 标题和描述中提及的知识点主要集中在IntraWeb框架中Session的实现与管理机制。Session在Web应用开发中扮演着至关重要的角色,它允许服务器为每个用户保持...

    ASP.NET深入解析

    本篇文章将深入解析ASP.NET的关键概念、核心组件以及实际应用中的重要技术。 一、ASP.NET概述 ASP.NET不仅仅是一个编程语言,而是一整套用于构建动态网站、Web服务和富互联网应用(RIA)的平台。它支持多种编程模型...

    关于servlet中request,session,application三者关系的形象解析

    本文将深入解析这三者的概念、特点以及它们之间的关系。 1. HttpServletRequest request对象: request对象代表一个HTTP请求,它是每次用户与服务器交互时产生的。它存储的是请求相关的数据,如请求参数、请求头等...

    深入解析Session是否必须依赖Cookie

    当用户第一次访问使用Session的网页时,服务器会生成一个Session ID,并通过Set-Cookie响应头将其存储在用户的Cookie中。在随后的请求中,浏览器会在请求头中携带这个Session ID,使得服务器能够识别并关联到相应的...

    Hibernate_Session_Transaction

    这篇文章将深入解析这两个概念及其相关知识点。 `Session`是Hibernate提供的一种与数据库交互的接口,它扮演着应用程序与数据库之间的桥梁角色。与Web开发中的`HttpSession`不同,`Hibernate Session`与JDBC的`...

    (转)讲解各种session

    本篇文章将深入探讨Session的工作原理、类型以及如何在不同编程语言中使用。 首先,我们需要理解Session的基本概念。当用户打开一个网站并登录时,服务器会为该用户创建一个唯一的Session ID,这个ID通常通过Cookie...

    获取SessionID

    本文将围绕如何获取SessionID展开讨论,并通过示例代码深入解析其工作原理。 #### 一、Session简介 1. **概念**:Session是服务器端技术,它通过在服务器上保存用户的信息来识别不同的用户会话。 2. **作用**:...

    Express-Session源码分析

    本文将深入剖析Express-Session的源码,揭示其工作原理,并探讨如何在实际项目中高效利用。 一、Express-Session概述 Express-Session的核心功能在于为每个用户创建一个唯一的session ID,这个ID存储在客户端的...

    深入解析tomcat.pdf

    《深入解析Tomcat》这本书是Java Web开发领域的一本经典之作,由曹旭东翻译,提供了对Apache Tomcat服务器的全面、深入的理解。Tomcat是一款轻量级的应用服务器,广泛用于部署Servlet和JSP应用。以下是对这本书内容...

    PHP中session全面教程

    #### 一、Session概念解析 在深入探讨PHP中Session的具体用法之前,我们首先需要理解Session到底是什么以及它为何如此重要。 **1.1 Session的基本定义** Session是一种用来追踪用户与服务器之间交互的技术,类似...

    SpringSession同时支持Cookie和header策略

    本文将深入探讨SpringSession如何支持Cookie和header策略,并解析`CookieHeaderHttpSessionStrategy.java`这个文件中的关键概念和技术细节。 首先,我们来看标题提及的“SpringSession同时支持Cookie和header策略”...

Global site tag (gtag.js) - Google Analytics