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

        

    笨鸟先飞
  • 相关阅读:
    利用itextsharp.dll 导出pdf格式文件
    Oracle 连接失去联系、链接空闲例程
    Log4net用法
    oracle 用户锁定(ORA28000:the account is locked)的解锁方法:
    智能提示框设计 仿携程
    利用System.Net.Mail 的SmtpClient发送邮件
    CTE实现嵌套递归
    读入excel中的数据到数据库中
    项目发布遇见的问题的整理
    JavaScript substring() 方法
  • 原文地址:https://www.cnblogs.com/zoutingrong/p/14683037.html
Copyright © 2020-2023  润新知