`

关于Session的几点疑问

阅读更多
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)

注意:在使用session时应该注意检测是否为空,尤其是使用ActionContext.getContext.getSession()时,
清空session可以使用ActionContext.getContext.getSession().clear();清空Map即可!

   3、如何做到在浏览器关闭时删除session

严 格的讲,做不到这一点。可以做一点努力的办法是在所有的客户端页面里使用javascrīpt代码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核心模式》关于表示层模式的部分。需要注意的是对于使用javascrīpt window.open打开的窗口,一般不设置这个id,或者使用单独的id,以防主窗口无法操作,建议不要再window.open打开的窗口里做修改 操作,这样就可以不用设置。

9、为什么在Weblogic Server中改变session的值后要重新调用一次session.setValue
   
   做这个动作主要是为了在集群环境中提示Weblogic Server session中的值发生了改变,需要向服务器进程复制新的session值。

    10、为什么session不见了

排 除session正常失效的因素之外,服务器本身的可能性应该是微乎其微的,虽然笔者在iPlanet6SP1加若干补丁的Solaris版本上倒也遇到 过;浏览器插件的可能性次之,笔者也遇到过3721插件造成的问题;理论上防火墙或者代理服务器在cookie处理上也有可能会出现问题。
出现这一问题的大部分原因都是程序的错误,最常见的就是在一个应用程序中去访问另外一个应用程序。我们在下一节讨论这个问题。

  七、跨应用程序的session共享

常 常有这样的情况,一个大项目被分割成若干小项目开发,为了能够互不干扰,要求每个小项目作为一个单独的web应用程序开发,可是到了最后突然发现某几个小 项目之间需要共享一些信息,或者想使用session来实现SSO(single sign on),在session中保存login的用户信息,最自然的要求是应用程序间能够访问彼此的session。

然而按照Servlet规范,session的作用范围应该仅仅限于当前应用程序下,不同的应用程序之间是不能够互相访问对方的session的。各个应用服务器从实际效果上都遵守了这一规范,但是实现的细节却可能各有不同,因此解决跨应用程序session共享的也各不相同。

首 先来看一下Tomcat是如何实现web应用程序之间session的隔离的,从Tomcat设置的cookie路径来看,它对不同的应用程序设置的 cookie路径是不同的,这样不同的应用程序所用的session id是不同的,因此即使在同一个浏览器窗口里访问不同的应用程序,发送给服务器的session id也可以是不同的。
分享到:
评论

相关推荐

    下午4_Intel_michael.fu_Meego session day.pdf

    接下来,我们将从几个方面来深入探讨这份文档中的核心知识点。 ### 一、Meego操作系统概述 Meego是一个基于Linux的操作系统,旨在为各种智能设备提供支持,包括智能手机、上网本、平板电脑等。它是由英特尔(Intel)...

    点击流分析前整理的相关材料

    5. **关于Bounce Rate定义的疑问**:Bounce Rate是网站分析中的重要指标,但其定义有时可能引发混淆。标准定义是单页会话的比例,即用户只查看一个页面就离开的会话。然而,用户可能因多种原因只查看一个页面,如...

    shiro权限代码

    在实际项目中,还需要注意以下几点: - 配置Shiro的日志,以便于调试和排查问题。 - 针对不同的应用场景,选择合适的认证和授权策略。 - 对于敏感操作,可以添加CSRF防护,防止跨站请求伪造攻击。 - 对于密码存储,...

    ICE 学报 第一期

    本期 FAQ 可能包含关于 Glacier2 会话管理的常见问题解答,以及 Ice 和 Python 应用开发的相关疑问解答。 **Upcoming Topics:** 未来的 ICE 学报中可能会涉及更深入的主题,如 Glacier 的高级编程技巧和分布式应用...

    SqlServer应用之sys.dm_os_waiting_tasks 引发的疑问(上)

    sys.dm_exec_requests 主要提供当前会话中活动请求的状态信息,包括但不限于以下几点: 1. session_id:执行请求的会话ID。 2. request_id:请求的ID,在每个会话内是唯一的。 3. command:执行的SQL命令类型(例如...

    第七天31南京H5功能对比及相关话术共21页.pdf.zi

    可能包括以下几点: 1. **解释H5的优势**:如跨平台兼容性、用户体验提升、更好的性能和更低的开发成本。 2. **针对疑虑的解答**:例如,对于H5是否能替代原生APP的疑问,可以强调其轻量化、更新快速和无需下载的...

    SSO单点登录的PHP实现方法(Laravel框架)

    8. 实现中遇到的疑问和问题:在文档中提到,存在的一些疑问例如session与Cache时间不一致导致的单点登录失效问题,以及业务模块相关性差带来的认证问题。这些疑问指出了SSO在实际应用中可能遇到的一些挑战和需要...

    Strust2.0 总结文档1

    在该文档中提到的一个常见疑问是关于 `scope` 属性的默认值。 **默认值:** `session` 尽管某些开发工具如 MyEclipse 在代码提示时可能显示 `request` 作为 `scope` 的默认值,但实际上如果在配置文件中不明确指定 ...

    WCF.App.zip

    在“WCF.App.zip”这个压缩包中,我们能看到几个关键的技术点: 1. **Net.TCP端口共享技术**:Net.TCP是一种高性能、低开销的传输协议,专为WCF设计。端口共享功能允许多个服务在同一端口上运行,减少了网络资源的...

    jsch-0.1.55jar&&javadoc&&sources.zip

    使用JSCH库进行Java SSH编程时,需要注意以下几点: 1. 错误处理:SSH连接可能出现各种问题,如网络中断、认证失败等,因此,必须正确处理异常并提供适当的恢复机制。 2. 安全性:使用公钥/私钥对进行身份验证可以...

    TDA部署交换机配置

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. TDA部署交换机配置概述 在TDA(Threat Defense Appliance)的部署过程中,交换机配置扮演着至关重要的角色。为了确保TDA能够有效地监测网络流量...

    让 FCKeditor 支持多用户Web环境(以PHP为例)

    在进行这样的配置时,需要注意几个关键点: 1. 确保在修改配置文件前先启动会话。这需要在脚本开始处调用session_start()函数。这是因为在PHP中使用$_SESSION超全局变量之前必须先启动会话。 2. 为了确保用户的...

    ASP+ACCESS网上教学系统设计(论文+源代码).zip

    在学习和研究这个系统时,应关注以下几个关键知识点: 1. ASP编程基础:理解VBScript语法,掌握响应对象、请求对象、服务器对象等核心概念。 2. ACCESS数据库操作:学习如何创建表、定义字段类型、设置关联,以及...

    VEM_WS_Wuhan.pdf

    最后,文档提到了“Conclusion and wrap-up session(Q&A session)”,即总结会和问答环节,这是在研讨会结束时,与会者可以就所学内容提出疑问,与主讲人David Almer进行互动交流。 整体而言,这本研讨会资料为我们...

    项目案例:论坛短信息

    这个项目可能涉及到以下几个关键知识点: 1. **前端技术**:项目可能使用HTML、CSS和JavaScript进行页面布局和交互设计。HTML用于构建网页结构,CSS负责样式设定,而JavaScript则处理用户的动态交互,如发送和接收...

    jsp网络教学管理系统

    下面将详细介绍这个系统的相关知识点。 首先,Java技术是这个系统的基础,它是一种多平台、面向对象的编程语言,具有跨平台移植性、安全性和性能优良的特点。在本系统中,Java主要负责后端逻辑处理,如用户认证、...

    软件工程 课程设计 沃尔沃物流发布系统(asp.net vs2005平台)

    在这个课程设计中,我们可能涉及到以下几个关键知识点: 1. **需求分析**:首先,需要理解物流行业的业务流程,识别系统的主要功能,如货物跟踪、订单处理、配送信息发布等,以及用户角色(如管理员、客户、供应商...

    当当网----练习小项目

    当当网作为一个电子商务平台,其核心功能包括商品浏览、搜索、购物车、订单处理、用户登录注册等,因此在代码实现上,我们需要掌握以下几个关键知识点: 1. **前端开发**:项目可能使用HTML、CSS和JavaScript来构建...

    详解Oracle调试存储过程

    在实际操作中,有几点需要注意: - **本地调试优先**:为了保证最佳的性能和稳定性,推荐在本地环境中进行调试,避免远程调试可能带来的网络延迟和不稳定因素。 - **理解调试环境**:熟悉你的开发工具的调试特性,...

    ASP咨询类网站

    在ASP咨询类网站的实现中,通常包含以下几个关键知识点: 1. **ASP基础**:ASP使用VBScript或JScript作为默认脚本语言,通过HTTP协议与客户端浏览器通信。开发者可以创建包含HTML、脚本和服务器端控件的网页,...

Global site tag (gtag.js) - Google Analytics