当浏览器被关闭时,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。

    

笨鸟先飞
原文地址:https://www.cnblogs.com/zoutingrong/p/14683037.html