`
gaobusi
  • 浏览: 197393 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

HttpSession常见问题

    博客分类:
  • JAVA
阅读更多

HttpSession 常见问题


    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 ,具体做法参见 [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机制详解

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

    Web_4_状态管理Cookie和HttpSession1

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

    SpringBoot项目实现登录验证码校验功能(可以学习,可以作为工具)

    在 Web 应用中,为了防止恶意攻击者利用自动化程序进行暴力破解登录密码,在登录界面添加验证码是一种常见的防御手段。 该项目的核心思想是:在用户访问登录界面时生成一个包含随机字符的图片,并将该图片展示给...

    Hibernate体系结构的概要图

    Session接口 Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的...

    JSP分页(技术)代码

    目前比较广泛使用的分页方式是将查询结果缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时第一次查询遍历...

    JSP分页技术实现.mht

    目前比较广泛使用的分页方式是将查询结果缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时第一次查询遍历...

    很好的一个jsp分页

    很好的jsp分页,目前比较广泛使用的分页方式是将查询结果缓存在HttpSession或有状态bean中,翻页的时候从缓存中取出一页数据显示。这种方法有两个主要的缺点:一是用户可能看到的是过期数据;二是如果数据量非常大时...

    JSP2.0技术手册pdf(带示例源码).zip

    9-2 窗体中常见的输入类型 9-3 JSP 处理窗体 9-4 文件上传—— Oreilly 上传组件 9-5 jspSmartUpload ——上传和下载 9-6 本文区输入类型(Textarea) 第十章 Session Tracking 10-1 Stateful & Stateless 10-2 ...

    网站设计方案(完整版).doc

     Session接口 Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交 流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时 ,Hibernate的session不同于JSP应用中的...

    spring security 参考手册中文版

    8.1问题跟踪 72 8.2成为参与 73 8.3更多信息 73 第二部分 架构与实现 73 9.技术概述 73 9.1运行环境 73 9.2核心组件 74 9.2.1 SecurityContextHolder,SecurityContext和认证对象 74 获取有关当前用户的信息 75 ...

    超级有影响力霸气的Java面试题大全文档

     异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获...

    java 面试题 总结

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的...

    千方百计笔试题大全

    106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? 24 108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下...

    java面试宝典

    106、HttpSession session = request.getSession() 24 107、getParameter与 getAttribute的区别? 24 108、以下哪一个不是赋值符号? 25 109、以下哪个不是Collection的子接口? 25 110、.BufferedReader的父类是以下...

Global site tag (gtag.js) - Google Analytics