1. Session的基本使用
      1. 概念
        Session:服务端会话跟踪技术:将数据保存到服务端。
      2. Session的工作流程
      • 在服务端的AServlet获取一个Session对象,把数据存入其中
      • 在服务端的BServlet获取到相同的Session对象,从中取出数据
      • 就可以实现一次会话中多次请求之间的数据共享了
      • 现在最大的问题是如何保证AServlet和BServlet使用的是同一个Session对象
      1. Session的基本使用
        具体的使用步骤为:
      • 获取Session对象,使用的是request对象
        1. HttpSession session = request.getSession();
      -  Session对象提供的功能: 
         -  存储数据到 session 域中 
    
    void setAttribute(String name, Object o)
    
         -  根据 key,获取值 
    
    Object getAttribute(String name)
    
         -  根据 key,删除该键值对 
    
    void removeAttribute(String name)
    
    1. Session常用方法的使用
      void setAttribute(String name, Object o)
      Object getAttribute(String name)
      
    1. Session的原理分析
      1.用户第一次访问的时候,tomcat会创建对应的session容器,每个容器具有唯一的标识JSESSIONID,然后tomcat底层创建会话级别的cookie存储唯一标识JSESSIONID存储到浏览器端。
      2.用户再次访问,tomcat中取出session并从cookie中取出之前保存的唯一标识JSESSIONID进行比较查找自己的session容器
      3.介绍完Session的原理,我们只需要记住:Session是基于Cookie来实现的
      1. Session的使用细节
      2. 浏览器关闭后,session持久化方案
        tomcat在创建cookie的时候属于会话级别的cookie,关闭浏览器,cookie消失,下次打开浏览器不会携带之前的cookie即cookie中的JSESSIONID到tomcat服务器中了,那么这样会造成tomcat服务器中会有很多个不能使用的session容器(session依然还在,只是找不到了)。严重的话会造成服务器宕机。
      3. 持久化session来解决上述问题
        主要问题是cookie是会话级别的,我们只需要将会话级别的cookie变为持久化级别的即可,持久化session就是持久化cookie。
        步骤:
        1.创建session
        2.获取session的JSESSIOID的值
        3.创建Cookie ,Cookie(“JSESSIOID”,值)
        4.使用cookie对象调用方法setMaxAge()进行cookie的持久化,存活时间建议30min
        5.将cookie响应给浏览器
        //1.创建session
        HttpSession session = request.getSession();
        //2.获取session的JSESSIOID的值
        String sessionId = session.getId();
        System.out.println(sessionId);
        //3.创建Cookie ,Cookie("JSESSIOID",值)
        Cookie cookie = new Cookie("JSESSIONID", sessionId);
        //4.使用cookie对象调用方法setMaxAge()进行cookie的持久化,存活时间建议30min
        cookie.setMaxAge(60*30);
        //5.将cookie响应给浏览器
        response.addCookie(cookie);
        
    1. Session销毁
      session的销毁会有两种方式:

      • 默认情况下,无操作,30分钟自动销毁
        对于这个失效时间,是可以通过配置进行修改的
        在项目的web.xml中配置 ``` <?xml version=”1.0” encoding=”UTF-8”?>

      <session-timeout>10</session-timeout>
      

      ```

    • 调用Session对象的invalidate()进行销毁
      在SessionDemo2类中添加session销毁的方法

        //获取数据,从session中
        //1. 获取Session对象
        HttpSession session = request.getSession();
        System.out.println(session);
      
        // 销毁
        session.invalidate();
        //2. 获取数据
        Object username = session.getAttribute("username");
        System.out.println(username);