以前在学习的时候没怎么注意,今天又回过头来仔细研究研究了一下Session的生命周期。
Session存储在服务器端,一般为了防止在服务器的内存中(为了高速存取),Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
Session什么时候失效?
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为30分钟。
2. 调用Session的invalidate方法。
Session对浏览器的要求:
虽然Session保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为Session需要使用Cookie作为识别标志。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为JSESSIONID的Cookie,它的值为该Session的id(也就是HttpSession.getId()的返回值)。Session依据该Cookie来识别是否为同一用户。
该Cookie为服务器自动生成的,它的maxAge属性一般为-1,表示仅当前浏览器内有效,并且各浏览器窗口间不共享,关闭浏览器就会失效。因此同一机器的两个浏览器窗口访问服务器时,会生成两个不同的Session。但是由浏览器窗口内的链接、脚本等打开的新窗口(也就是说不是双击桌面浏览器图标等打开的窗口)除外。这类子窗口会共享父窗口的Cookie,因此会共享一个Session。
注意:新开的浏览器窗口会生成新的Session,但子窗口除外。子窗口会共用父窗口的Session。例如,在链接上右击,在弹出的快捷菜单中选择"在新窗口中打开"时,子窗口便可以访问父窗口的Session。
如果客户端浏览器将Cookie功能禁用,或者不支持Cookie怎么办?例如,绝大多数的手机浏览器都不支持Cookie。Java Web提供了另一种解决方案:URL地址重写。
URL地址重写是对客户端不支持Cookie的解决方案。URL地址重写的原理是将该用户Session的id信息重写到URL地址中。服务器能够解析重写后的URL获取Session的id。这样即使客户端不支持Cookie,也可以使用Session来记录用户状态。HttpServletResponse类提供了encodeURL(String url)实现URL地址重写,该方法会自动判断客户端是否支持Cookie。如果客户端支持Cookie,会将URL原封不动地输出来。如果客户端不支持Cookie,则会将用户Session的id重写到URL中。
注意:TOMCAT判断客户端浏览器是否支持Cookie的依据是请求中是否含有Cookie。尽管客户端可能会支持Cookie,但是由于第一次请求时不会携带任何Cookie(因为并无任何Cookie可以携带),URL地址重写后的地址中仍然会带有jsessionid。当第二次访问时服务器已经在浏览器中写入Cookie了,因此URL地址重写后的地址中就不会带有jsessionid了。
分享到:
相关推荐
Session生命周期的设置是管理用户会话的关键环节,它决定了一个Session对象从创建到失效的时间间隔。本篇将深入探讨Session的工作原理、生命周期以及如何进行有效设置。 一、Session的工作原理 Session的工作基于...
本示例将深入探讨Hibernate Session的生命周期及其使用,帮助你更好地理解和运用这个强大的工具。 Hibernate Session是Hibernate的核心接口,它是与数据库交互的主要接口。Session对象负责管理实体对象的状态,包括...
本项目实例旨在演示如何利用XFire来开发一个带有Session生命周期管理的Web服务。 首先,让我们深入了解XFire。XFire(现已被Apache CXF所取代)是一个轻量级的Web服务框架,它提供了快速、简单地创建和部署Web服务...
通过Ex01_05视频教程,你将详细学习到如何在实际项目中配置和管理C#.NET的Session生命周期,包括设置超时、选择存储模式以及优化Session使用等技巧。这将有助于你更好地理解Session在Web开发中的角色,从而提升应用...
首先,Session生命周期的起点是生成一个Session ID。这个ID通常在用户首次访问服务器时由服务器生成,并且是随机的,以便每个用户的Session ID都是唯一的。Session ID的生成可以使用PHP内置的函数,比如session_id()...
以下是关于使用监听器跟踪Session生命周期和属性的详细解释。 1. **HttpSessionListener**: - `HttpSessionListener` 是Servlet API提供的一种接口,用于监听HttpSession对象的创建和销毁事件。 - 当一个新的...
在探讨如何通过`OpenSessionInViewFilter`来有效管理Hibernate中的Session生命周期之前,我们需要先理解Session及其生命周期的基本概念。 #### Session与生命周期 在Hibernate框架中,`Session`是执行数据库操作的...
本话题主要关注DataSnap Server的三种生命周期:Invocation生命周期,Session生命周期,以及Server生命周期。我们将深入探讨这些概念,并结合提供的文件名称列表来解析它们在实际应用中的意义。 首先,我们来看`...
2. Session生命周期: 新的浏览器窗口开启会启动一个新的Session,并可能触发`Global.asax`中的`Session_Start`事件。同一浏览器窗口内的多个页面请求不会创建新Session。Session过期后,即使页面提交,也会触发新...
这两个接口提供了对Session生命周期事件的监听方法: 1. `HttpSessionListener`: 包含两个方法,`sessionCreated(HttpSessionEvent se)`用于监听Session创建事件,`sessionDestroyed(HttpSessionEvent se)`用于监听...
然而,有些情况下我们并不需要完整的Session生命周期,比如执行只读操作或者简单的数据检索。在这种情况下,使用Hibernate-nosession模式可以避免创建和管理Session的开销,从而提高应用性能。nosession模式并不意味...
#### 三、Session的生命周期 1. **创建**:当用户首次访问应用时。 2. **使用**:在整个会话过程中,可以读取和修改Session中的数据。 3. **销毁**:通常情况下,Session会在一定时间后自动失效,也可以手动销毁。 ...
3. **调整Session生命周期**:可以通过修改`<sessionState>`元素的`timeout`属性来延长或缩短Session的有效时间。 4. **检查配置**:核对web.config中的Session配置,确保它们符合预期。 5. **修正IIS设置**:检查...
这可能是因为服务器上的Session生命周期设置过长,或者由于使用了持久化Cookie。解决方法是设置合理的Session生命周期,并在必要时清除用户的Cookie: ```php // 设置 Session 生命周期为 30 分钟 ini_set('session...
如果session过期,通常是因为设置的session生命周期已到达,或者是由于某些原因session数据被清除。 在phpcms中,session配置可以在`config.php`或`phpcms/inc.php`等配置文件中找到。可以调整以下参数来解决...
- **Session生命周期**:从用户第一次访问网站开始,直到会话结束或超时为止。 - **安全性**:由于`session`信息存储在服务器端,因此相比客户端的`cookie`而言更加安全。 - **资源消耗**:尽管`session`提高了安全...
1. **Session生命周期**:默认情况下,Session的生命周期大约为30分钟,即用户在30分钟内无操作,Session就会被服务器自动销毁。这个时间可以通过`setMaxInactiveInterval()`方法在服务器端进行设置。 2. **检测...
以下是对`Session`生命周期、何时失效以及对浏览器要求的详细解释。 ### Session的生命周期 1. **创建**:当用户首次访问包含JSP、Servlet等动态内容的网页时,服务器会检查是否存在当前用户的`Session`。如果没有...
- 设置适当的Cookie和Session生命周期,防止长期有效的登录令牌被滥用。 6. **最佳实践**: - 考虑使用更现代的身份验证机制,如JWT(JSON Web Tokens),它们可以提供更安全、更灵活的用户认证方案。 通过以上...