当浏览器被关闭时,session是否被关闭?
在一次学习统计网站上线人数时被这个问题困扰了许久,一开始天真的认为当浏览器关闭时,session也会随着关闭。
这时我们需要了解session的实现原理
当浏览器被关闭时,session并没有被关闭,而是关闭的浏览器的jsession,此时服务器的session并没有被销毁。
那么服务器中的session是在何时被销毁的呢?
当该session过期时,该session就会被销毁。
我们可以从一个简单得到案例得知。
监听类
package weblistenner; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * @author ztr * @version 创建时间:2021年4月20日 下午7:25:40 * 类说明 */ /** * * * 项目名称:web05 类名称:HttpSessionListenner 类描述: 创建人:ztr 创建时间:2021年4月20日 下午7:25:43 * * @version 访问html不会创建Session * 访问jsp会创建Session 因为jsp会被翻译成servlet且通过起源码可以得知 * javax.servlet.http.HttpSession session = null; * session = pageContext.getSession(); * 访问Servlet也不会创建Session因为其默认没有调用getSession方法 */ public class HttpSessionListenner implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent sec) { System.out.println("Httpsession被创建"); } @Override public void sessionDestroyed(HttpSessionEvent sec) { System.out.println("Httpsession被销毁"); } }
监听类的配置
<listener> <listener-class> weblistenner.HttpSessionListenner </listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config>
当我们打开浏览器是,控制台会输出以下内容
Httpsession被创建
此时我们关闭浏览器,控制台并没有输出session被销毁
因为我们在xml配置文件中配置的session的过期时间为1分钟,一分钟后,我们可以看到控制台输出以下内容
Httpsession被创建
Httpsession被创建
当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;
当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,是不同的session。
笨鸟先飞