1、session在何时被创建
一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用 HttpServletRequest.getSession(true)这样的语句时才被创建,注意如果JSP没有显示的使用 <% @page session="false"%> 关闭session,则JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。
由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。
2、session何时被删除
综合前面的讨论,session在下列情况下被删除a.程序调用HttpSession.invalidate();或b.距离上一次收到客户端发送的session id时间间隔超过了session的超时设置;或c.服务器进程被停止(非持久session)
3、如何做到在浏览器关闭时删除session
严格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascript代码window.oncolose来监视浏览器的关闭动作,然后向服务器发送一个请求来删除session。但是对于浏览器崩溃或者强行杀死进程这些非常规手段仍然无能为力。
4、有个HttpSessionListener是怎么回事
你可以创建这样的listener去监控session的创建和销毁事件,使得在发生这样的事件时你可以做一些相应的工作。注意是session的创建和销毁动作触发listener,而不是相反。类似的与HttpSession有关的listener还有 HttpSessionBindingListener,HttpSessionActivationListener和 HttpSessionAttributeListener。
5、存放在session中的对象必须是可序列化的吗
不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Server的session中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果 session中有不可序列化的对象,在session销毁时会有一个Exception,很奇怪。
6、如何才能正确的应付客户端禁止cookie的可能性
对所有的URL使用URL重写,包括超链接,form的action,和重定向的URL,具体做法参见
http://e-docs.bea.com/wls/docs70/webapp/sessions.html#100770
7、开两个浏览器窗口访问应用程序会使用同一个session还是不同的session
参见第三小节对cookie的讨论,对session来说是只认id不认人,因此不同的浏览器,不同的窗口打开方式以及不同的cookie存储方式都会对这个问题的答案有影响。
8、如何防止用户打开两个浏览器窗口操作导致的session混乱
这个问题与防止表单多次提交是类似的,可以通过设置客户端的令牌来解决。就是在服务器每次生成一个不同的id返回给客户端,同时保存在session里,客户端提交表单时必须把这个id也返回服务器,程序首先比较返回的id与保存在session里的值是否一致,如果不一致则说明本次操作已经被提交过了。可以参看《J2EE核心模式》关于表示层模式的部分。需要注意的是对于使用javascript window.open打开的窗口,一般不设置这个id,或者使用单独的id,以防主窗口无法操作,建议不要再window.open打开的窗口里做修改操作,这样就可以不用设置。
9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue
做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变,需要向其他服务器进程复制新的session值。
10、为什么session不见了
排除session正常失效的因素之外,服务器本身的可能性应该是微乎其微的,虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇到过;浏览器插件的可能性次之,笔者也遇到过3721插件造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。
出现这一问题的大部分原因都是程序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。
分享到:
相关推荐
### 关于Servlet中的Session理解 在Web开发领域中,Servlet技术是Java Web开发的重要组成部分,而Session机制则是处理用户会话的关键技术之一。本文将基于提供的文件内容,深入探讨Servlet中Session的工作原理、...
本篇文章将深入探讨如何在Servlet中使用session,并通过一个猜数字的小游戏来实践这个概念。 首先,理解什么是session。Session是一种基于cookie的会话管理机制,当用户首次访问服务器时,服务器会在内存中创建一个...
在这个“登录验证完整版(servlet及session技术支持)”项目中,我们主要关注的是使用Servlet和Session来实现这一功能。Servlet是Java服务器端编程的基础,而Session则是一种在HTTP无状态协议上维护用户会话状态的...
Servlet Session机制详解,如题,详细描述Session的原理,及使用方法,附部分代码
本文将深入探讨JSP和Servlet中的session概念,以及它们如何在Web应用程序中实现状态管理。HTTP协议本身是无状态的,这意味着每次客户端(浏览器)向服务器发送请求时,服务器无法识别请求是否来自同一个会话。为了...
Servlet中如何捕获Session事件
在Servlet中,我们可以使用`HttpServletRequest` 的 `getSession()` 方法来创建或获取Session。如果Session不存在,它会新建一个;如果已存在,就返回现有的Session。 4. **存储Session数据** 一旦有了Session...
该案例是基于Java Web技术,特别是JSP(JavaServer Pages)、Servlet和Session,实现的一个图书查询及购物车系统。这个系统充分利用了三层架构模式,即表现层(Presentation Layer)、业务逻辑层(Business Logic ...
Servlet不仅能够生成动态内容,还能进行会话管理,其中最常用的就是Cookie和Session。本文将深入探讨Servlet如何管理和利用这两种技术进行会话跟踪。 **Cookie管理** Cookie是一种客户端存储机制,用于在用户的...
Servlet是Java EE技术中用于处理Web应用客户端请求的核心组件,它是实现了特定接口的Java类,主要职责是接收和响应客户端的HTTP请求。Servlet容器(如Tomcat)负责加载和运行Servlet,当特定请求到达时,容器会实例...
标题“JSP_tomcat_mysql_servlet_session”揭示了这个实例是关于在Java Web开发中使用JSP、Tomcat服务器、MySQL数据库以及Servlet和Session来实现Model-View-Controller(MVC)架构的一个实践项目。这里我们将深入...
【标题】:“北大青鸟Y2指导学习一servlet和session”主要涵盖了Web开发中的两个核心概念:Servlet和Session。Servlet是Java服务器端编程的重要组成部分,用于扩展服务器的功能,处理HTTP请求并返回响应。而Session...
在这个Java Web应用开发的课堂案例中,我们关注的是如何在Servlet中读取和处理Session数据。Session是Web应用程序中用来跟踪用户状态的一种机制,特别是在无状态的HTTP协议上。这个案例主要涵盖了以下几个知识点: ...
Session技术则是Servlet中的一种重要概念,它在用户会话管理中扮演着关键角色。本篇将深入探讨Servlet Session购物车的实现原理及应用,以帮助你更好地理解和运用这一技术。 一、Servlet Session基础 1. 什么是...
在Java Web开发中,`JSP` 和 `Servlet` 是两个关键组件,它们共同构建了动态Web应用程序。而`过滤器(Filter)`是Servlet API的一部分,它提供了一种机制来拦截请求和响应,实现诸如登录验证、字符编码转换、性能...
本教程将聚焦于如何在JSP应用中使用Servlet和Session对象来实现在不同页面间的数据共享,尤其适用于JBuilder开发环境。 **一、JSP与Servlet简介** JSP是一种服务器端技术,它允许开发者使用HTML或者XML模板来嵌入...
标题 "birt 使用session数据, 通过servlet访问" 涉及到的是在BIRT(Business Intelligence and Reporting Tools)报告引擎中如何利用HTTP Session来传递和使用数据,特别是通过Servlet进行访问。在这个场景下,...
课程将深入讲解如何在Servlet或JSP中创建和管理session,以及如何设置和获取session属性,确保用户在浏览网站时能够保持登录状态。 5. **网上交易系统架构**:一个完整的网上交易系统通常包括用户登录、商品浏览、...
Java Servlet技术通过Session机制来实现会话跟踪。当我们创建一个会话时,服务器会在用户的浏览器和服务器之间建立一个唯一的会话标识符(session ID)。这个标识符通常被存储在客户端的cookie中。当用户再次访问...
在servlet中,session是封装在javax.servlet.http.HttpSession这个接口中的,这个接口是构建在cookie或者URL重写的基础上,要得到一个HttpSession的实例,就可以通过HttpServletRequest的getSession()方法来获得