zoukankan      html  css  js  c++  java
  • 【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("销毁成功");
            }
        }
    }
  • 相关阅读:
    C# Task.Run 和 Task.Factory.StartNew 区别
    数据库面试题(实时更新)
    python面试题(实时更新)
    opencv简介以及环境搭建
    Django分页器
    django的开发环境
    Django简介以及MVC模式
    Virtualbox修改虚拟机分配内存的大小
    深浅拷贝
    react-native-typescript-项目环境搭建
  • 原文地址:https://www.cnblogs.com/ysdrzp/p/9885916.html
Copyright © 2011-2022 走看看