在学习servlet时会发现,关闭浏览器,再打开新浏览器并发送请求,会生成了一个与关闭浏览器之前不同的新的session对象。所以初学者会有这样一种理解,就是浏览器关闭后服务端会清除session对象。但实际上是不是这样的呢?
Session是在客户端请求到达服务器时,服务器为此请求发出的客户所创建的一个对象,保存在服务器端。购物车是一个很好的例子,一个用户可以有很多session,但每个session只针对一个用户,这就保证了不同session之间的信息独立。
首先说明一点,
在通常意义上,session所能发挥作用是基于cookie机制。针对所需要解释的问题,做这样一个假设:我们第一次访问一个网页。当客户端发送请求后,服务端会建立一个针对此请求发出客户的session对象,而且每个session都会有一个sessionID。服务端会自动将这个sessionID作为一个cookie附加到response上返回给客户端,这个cookie存放在浏览器内存中。我们每次对此网页发送的request都会附带着这个cookie,服务端收到这个请求后会都去cookie中取得这个sessionID,然后查询服务端是否存在一个对应此ID的session对象。如果有,可以直接使用此session;如果没有,则会新建一个。当浏览器关闭后,其所占的内存就会是放掉,cookie自然也就被清除了,此时我们不再保存有这个sessionID。所以再打开浏览器访问同一个页面时,由于没有sessionID,也就查不到对应的session对象,此时重新创建一个新的session对象。
那当我们关闭浏览器之后,服务器端原来的session对象是否还存在呢?答案是肯定的。服务端根本不知道我们是否关闭了浏览器,也不关心这个。客户端与服务端之间进行通信的唯一途径就是通过请求。服务器有自己的一套机制来管理session,比如多长时间会清除没有使用过的session对象,等等。
所以说,关闭浏览器session就被清除只是我们所看到的表面现象(实际上是新建了一个session对象),通常情况下,服务器并不会马上清除session对象,但这个根据服务端的设定而不同。
PS:cookie一般分为两种:一种是会话cookie,即服务端为session自动创建的cookie,这个cookie存放在浏览器进程中。另一种是可以存放在硬盘上的,可以通过服务端的某些设置,将一些信息放到cookie中并返回给客户端存放在硬盘上。
在以下情况中,session会结束生命周期,Servlet容器会将session所占用的资源释放掉:
- 客户端关闭浏览器(虽然不是这样,但还是这么说吧,解释参见上面)
- Session过期
- 服务器端调用了HttpSession的invalidate()方法
分享到:
相关推荐
根据提供的文件信息,本文将详细解释如何在ASP.NET应用程序中实现关闭页面时清除Session状态的具体方法及其实现机制。 ### 一、理解Session 在Web开发中,Session是一种常用的技术,用于存储用户会话期间的数据。...
6. **安全考虑**:为了防止恶意用户利用他人未关闭的浏览器继续访问,还可以在登出时生成一个随机的登出令牌,服务器接收到令牌后验证其有效性,确认无误后再销毁session。 在这个压缩包文件`ajaxchat1`中,可能...
在ASP.NET中,Session对象提供了存储用户特定数据的能力,这些数据可以在用户浏览网站的整个会话期间持续存在,直到会话结束或者数据被清除。 在ASP.NET的早期版本和2.0中,Session对象是由.NET Framework中的类...
Session对象在ASP.NET中扮演着重要的角色,它主要用于在服务器端维持与客户端浏览器之间的状态,尤其是在HTTP协议无状态的特性下。HTTP协议每次请求都是独立的,无法记住之前交互的信息,而Session则解决了这一问题...
- **用户体验**:虽然关闭浏览器并不一定导致Session消失,但为了避免用户在关闭浏览器后重新打开时仍保留原会话状态,有时会选择在关闭浏览器时清除Session,这需要通过JavaScript或者其他方式实现。 总之,...
Session 对象用于存储单个用户的数据,它的生命周期通常与用户的浏览器会话保持一致,即用户关闭浏览器或超过预设的无活动时间(默认20分钟)后,Session 数据将被清除。Session 对象适合存储用户个性化信息,如...
当用户登录后,服务器通常会创建一个Session对象,并将用户的标识(如用户名)存储在其中,这样在后续请求中就可以识别用户的身份。然而,在某些情况下,比如用户注销或关闭浏览器时,我们需要清空Session,以消除...
要实现在用户关闭页面时就清除Session,我们需要利用浏览器事件来触发清除操作。一种常见的方法是监听`window.onbeforeunload`或`window.onunload`事件,这两个事件会在页面卸载前触发。以下是一个简单的JavaScript...
通常,同一个IE客户端在不关闭浏览器的情况下,Session ID是不变的。但是,某些情况如页面重载、浏览器设置或安全策略可能导致Session ID更改。理解Session ID的工作原理对于解决如`Session_Start`和`Session_End`...
服务器将用户的相关信息存储在内存中的Session对象中,这个ID通过cookie发送给客户端浏览器。当客户端每次请求时,都会携带Session ID,服务器根据ID找到对应的Session数据。然而,Session有其生命周期,超过设定...
在用户登录后,服务器会创建一个Session,并将用户的登录信息(如用户ID、用户名等)存储在这个Session对象中,然后将Session的唯一标识符(通常称为Session ID)发送给浏览器。浏览器在后续的请求中携带这个Session...
同时,用户关闭浏览器或清除Cookie也会导致Session ID丢失,从而结束Session。 三、Session与Cookie的区别与联系 1. 存储位置: Cookie数据存储在客户端,占用有限的存储空间,且存在安全风险,因为数据可以被...
下面对每个对象进行详细解释。 1. request 对象 request 对象代表了客户端的请求信息,主要用于接受通过 HTTP 协议传送到服务器的数据。request 对象的作用域为一次请求,主要用于获取客户端的请求信息,包括头...
存放在客户端的用于保存 SessionID 的 Cookie 会在浏览器关闭时清除,因此当你重新打开一个浏览器时,第一次的输出依然会是"sorry,cookie is null...",因为服务器认为这是一次新的“会话”,同样当你刷新此页面时,...
一旦浏览器关闭,这类cookie将被自动清除。 - **持久cookie**:通过设置过期时间(如setMaxAge(60*60*24)),使其能够在用户关闭浏览器后继续存在,直至过期时间到达。 ### 如何利用实现自动登录与定制站点 **自动...
但若浏览器窗口关闭再打开,或使用隐私模式,可能会产生新的Session ID。要测试这一点,可以创建一个简单的ASP.NET应用,启用跟踪,观察Session ID的变化。 总之,ASP.NET Session是处理用户会话状态的重要工具,...
- 同时,`ClearClientPageCache()`方法用于清除浏览器缓存,以防止用户在退出后还能看到旧的、缓存的页面内容。 4. **浏览器缓存清除**: - `ClearClientPageCache()`方法中,使用了多种HTTP响应头来控制浏览器不...
知识点一:session超时概念及设置 session超时是指用户在...在这种形式中,用户每次登录后,系统会自动创建一个session,保存用户的登录信息,用户在不同页面间切换时无需重新登录,退出系统时关闭session,结束会话。
以下是对`Session`生命周期、何时失效以及对浏览器要求的详细解释。 ### Session的生命周期 1. **创建**:当用户首次访问包含JSP、Servlet等动态内容的网页时,服务器会检查是否存在当前用户的`Session`。如果没有...
在ASP.NET中,Session对象是一个关键的特性,它允许开发者在用户的不同请求之间存储和检索数据,以此来维持用户的状态。当用户首次访问网站时,ASP.NET会创建一个唯一的Session ID,将其作为Cookie返回给浏览器。在...