`
hyshucom
  • 浏览: 817960 次
文章分类
社区版块
存档分类
最新评论

HttpSession常见问题

 
阅读更多
1session在何时被创建
一个常见的误解是以为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还有 HttpSessionBindingListenerHttpSessionActivationListener HttpSessionAttributeListener

5
、存放在session中的对象必须是可序列化的吗
不是必需的。要求对象可序列化只是为了session能够在集群中被复制或者能够持久保存或者在必要时server能够暂时把session交换出内存。在 Weblogic Serversession中放置一个不可序列化的对象在控制台上会收到一个警告。我所用过的某个iPlanet版本如果session中有不可序列化的对象,在session销毁时会有一个Exception,很奇怪。

6
、如何才能正确的应付客户端禁止cookie的可能性
对所有的URL使用URL重写,包括超链接,formaction,和重定向的URL,具体做法参见[6]
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处理上也有可能会出现问题。
分享到:
评论

相关推荐

    Session-JavaWeb专题

    本课程系统地讲解了SESSION这个知识点,主要讲解了Session的...学习本课程可以理解Session机制,javax.servlet.http.HttpSession及HttpSession常见问题。免费试听地址:http://www.itcast.net/portal/courses/unit/124

    关于SESSION的好文章

    五、HttpSession常见问题及处理 1. Session超时:可通过设置HttpSession的超时时间,控制用户会话的有效期。 2. Session过多导致内存压力:过多的Session会消耗服务器资源,可以通过优化Session管理,如使用分布式...

    session机制详解

    目录: 一、术语session 二、HTTP协议与状态保持 三、理解cookie机制 四、理解session机制 五、理解javax.servlet.http.HttpSession ...六、HttpSession常见问题 七、跨应用程序的session共享 八、总结

    JSP常见问题

    JSP常见问题解析 JSP(Java Server Pages)是一种基于Java技术的服务器端脚本语言,用于生成动态网页。下面我们将讨论JSP中的一些常见问题及其解决方法。 1. 如何混合使用Jsp和SSI #include? 在JSP中,可以使用...

    SpringBoot实现登录注册常见问题解决方案

    以下是一些常见问题的解决方案: 1. **用户名密码都正确的情况下被登录拦截器拦截** 当你收到`ExecutorException`并提示“查询执行后没有找到Result Maps”时,这表明MyBatis没有找到对应的返回结果类型或Result ...

    Web_4_状态管理Cookie和HttpSession1

    第九章 状态管理-Cookie9.1 状态管理概述9.1.1 为什么需要状态管理9.1.2 什么是状态管理9.1.3 状态管理的两种常见模式1、写出HTTPSe

    JavaWeb中HttpSession中表单的重复提交示例

    在JavaWeb开发中,表单的重复提交是一个常见的问题,可能导致数据的异常处理或数据库的冗余操作。本示例主要关注如何利用HttpSession来防止这种情况的发生。 重复提交通常发生在以下几种场景: 1. 用户提交表单后,...

    Java常见异常集-Java,Hibernate,Tomcat异常

    本篇将详细解释一些常见的Java、Hibernate以及与Tomcat相关的异常,帮助开发者识别问题并找到解决策略。 1. **MySQLSyntaxErrorException**:这个异常通常出现在执行SQL查询时,由于语法错误或数据库表结构不匹配...

    java常见笔试题

    以下是一些关于Java笔试题的常见知识点: 1. **Forward和Redirect的区别**: - Forward(转发):服务器内部操作,浏览器地址栏不变。服务器处理请求后,将结果直接返回给浏览器。 - Redirect(重定向):服务器...

    java常见复习题.pdf

    使用`HttpSession`接口进行会话管理。创建会话通过`request.getSession()`,设置和获取属性使用`setAttribute()`和`getAttribute()`。会话生命周期从创建到浏览器关闭。 7. 常用集合接口: Collection接口是List...

    常见的findbugs解决方案

    4. J2EEJ2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION:存入 HttpSession 的对象需要实现 Serializable 接口,以便能够正确地序列化和反序列化。 5. NMNM_METHOD_NAMING_CONVENTION:方法名的第一个字母应该...

    java常见面试题简洁版

    Java是一种广泛使用的面向对象的编程语言,其面试...这些知识点是Java程序员面试中常见的问题,理解并掌握它们对提升编程能力至关重要。在实际工作中,这些概念和技术经常会被用到,是编写高效、健壮的Java程序的基础。

    SSH框架部分常见面试题.pdf

    创建传统的 HttpServletRequest、HttpSession、ServletContext 对象;实现 ServletRequestAware、ServletContextAware 接口。 Result 类型 Struts2 的 Result 类型有四种:Dispatcher、Redirect、Chain、...

    2. 20181218-会话管理1

    为了克服这个问题,开发者采取了几种会话跟踪技术,包括URL重写、隐藏域、Cookies以及HttpSession。下面我们将详细探讨这些技术。 首先,URL重写是一种简单但有限制的方法。它通过在URL中添加key-value对来存储信息...

    黑马点评详细总结(问题 + 踩坑点 + 解决思路)

    在"黑马点评详细总结"这个项目中,我们关注的是一个类似大众点评的平台,它大量使用了Redis这一内存数据存储系统。...对于初学者来说,这是一个很好的学习资源,可以深入理解实际项目中的一些常见问题和解决策略。

    JSP内部测试笔试题和答案.doc

    JSP内部测试笔试题和答案 JSP内部测试笔试题和答案资源摘要...常见的Servlet容器包括Tomcat、WebLogic、WebSphere等。 该资源摘要信息涵盖了JSP、Servlet、Ajax、Java EE等技术,涵盖了计算机领域中的多个知识点。

    基于HttpSessionBindingListener的登陆日志

    在Java Web开发中,HttpSessionBindingListener是一个重要的接口,用于监听HttpSession中的绑定和解绑事件。在本例中,我们将使用HttpSessionBindingListener来记录登陆者的用户名和登录时间到数据库中。 首先,让...

    过滤器详解参照.pdf

    过滤器能够帮助我们解决诸如编码问题、权限控制、日志记录、性能监控等常见需求。 在本节中,我们将深入探讨如何使用过滤器来批量设置请求编码和控制用户访问权限。 首先,让我们看看如何使用过滤器来解决编码问题...

    request.getSession().doc

    Request.getSession() 方法详解 Request.getSession() 方法是 HttpServletRequest 对象中的一个方法,用于获取当前 HTTP 请求关联的 ...通过了解该方法的参数和使用注意,可以避免常见错误,提高开发效率和代码质量。

    JAVA Servlet监听器listener学习资料

    - 统一管理:监听器可以统一处理全局性的问题,如资源初始化、异常处理等。 综上所述,Java Servlet监听器提供了强大的功能,能够帮助开发者实现对Web应用的细粒度控制和扩展,是构建健壮、高效Web应用程序的重要...

Global site tag (gtag.js) - Google Analytics