• 【Web入门系列】初探会话管理-Session


    特点

    会话数据保存在服务器端。

    Session技术核心

    1、创建或得到session对象

      HttpSession getSession()  

      HttpSession getSession(boolean create)  

    2、设置session对象

      #设置session的有效时间

      void setMaxInactiveInterval(int interval)  

      #销毁session对象

      void invalidate()  

      #得到session编号

      String getId()

    3、保存会话数据到session对象

      #保存数据

      void setAttribute(String name, Object value) 

      #获取数据

      Object getAttribute(String name) 

      #清除数据

      void removeAttribute(String name)

    Session原理

    1、第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID;2、把JSESSIONID作为Cookie的值发送给浏览器保存;

    3、第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器;4、服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象;

    5、如果找到对应编号的session对象,直接返回该对象;6、如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

    结论:通过JSESSIONID的cookie值在服务器找session对象。

    public class SaveSessionServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 1.创建session对象
            HttpSession session = request.getSession();
    
            // 2.保存会话数据
            session.setAttribute("name", "rose");
        }
    }
    public class GetSessionServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            // 1.创建session对象
            HttpSession session = request.getSession();
            if(session==null){
                System.out.println("没有找到对应的sessino对象");
                return;
            }
    
            // 2.取出数据
            String name = (String)session.getAttribute("name");
            System.out.println("name="+name);
        }
    }

    Session细节

    public class SaveSessionServlet extends HttpServlet {
    
        @Override
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            /**
             * 细节 1)
             * getSession(true)/getSession():创建或得到session对象,没有匹配的session编号,自动创    建新的session对象。
             * getSession(false):得到session对象,没有匹配的session编号,返回null。
             */
            // 1.创建session对象
            HttpSession session = request.getSession();
    
            /**
             * 得到session编号
             */
            System.out.println("id="+session.getId());
    
            /**
             * 细节 2)
             * session域对象默认30分钟服务器自动回收,手动设置session域对象的有效时间
             */
            //session.setMaxInactiveInterval(20);
    
            /**
             * 细节 3)
             * 浏览器JSESSIONID的cookie是放在浏览器内存中的,会随着浏览器关闭而丢失
             * 手动发送一个保存在硬盘的cookie给浏览器
             */
            Cookie cookie = new Cookie("JSESSIONID",session.getId());
            cookie.setMaxAge(60*60);
            response.addCookie(cookie);
    
            // 2.保存会话数据
            session.setAttribute("name", "rose");
        }
    }
    public class DeleteSessionServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
            HttpSession session = request.getSession(false);
            if(session != null){
                /**
                 * 细节 4)
                 * 手动销毁session
                 */
                session.invalidate();
                System.out.println("销毁成功");
            }
        }
    }
  • 相关阅读:
    二叉树中序遍历
    前序遍历
    配置免秘钥登录
    pip安装
    zookeeper C client API 和zkpython 的安装
    安装 Java
    json递归查询
    php 编译安装
    docker 中 安装配置 mysqlcluster(arm)
    glibc编译安装
  • 原文地址:https://www.cnblogs.com/ysdrzp/p/9885916.html
Copyright © 2020-2023  润新知