Day05JavaWeb【Cookie与Session】Session 看这篇就够了!***

Session的概述

  • (1)什么是Session?
    Session技术就是在服务端存取会话的数据
  • (2)有什么特点?
    存取key-value
    数据有存活时间
    每个Session的jsessionId不同

Session的原理

在这里插入图片描述
原理:
1》 服务器为浏览器分配一种对象叫session
2》每个session有id,可以存key-value
3》为了每个浏览器访问自己的数据不受他人影响,必须让Session有jessionId

Session存取数据

  • (1)获取Session
    HttpSession getSession() 获取session对象
  • (2)存数据
    setAttribute(key,value)
  • (3)读数据
    getAttribute(key)

src\com\wzx\pack01_set\Demo01SetServlet.java
存数据

@WebServlet("/set")
public class Demo01SetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //访问服务器,服务器为每个浏览器分配一个 session,有自己的id
        //1 获取session对象
        HttpSession session = request.getSession();
        //2 获取session的编号jsessionId
        String jsessionId = session.getId();

        response.getWriter().println(jsessionId);


        //3 保存key-value
        session.setAttribute("name","jack");
        session.setAttribute("age","20");

    }
}

src\com\wzx\pack01_set\Demo02GetServlet.java

@WebServlet("/get")
public class Demo02GetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        //1 获取session对象
        HttpSession session = request.getSession();

        //2 获取key对应的value
        String name = (String) session.getAttribute("name");
        String age = (String) session.getAttribute("age");

        System.out.println(name);
        System.out.println(age);

    }
}

使用 Cookie保存sessionID

src\com\wzx\pack02_session_persister\Demo03SetServlet.java

  • 每次关闭浏览器,再访问项目,服务器会分配一个新的sessionId
    如果关闭浏览器之后,再启动,想访问到之前的session的数据
    有一个要求,使用cookie,将sessionId保存到浏览器,浏览器在访问项目时 会自动将sessionid放到请求头中。

  • getSession()先根据jsessionId查找是否之前有session存在,如果有就重用该session,否则就创建一个新的。

  • Cookie cookie = new Cookie("JSESSIONID",jsessionId); 参数名必须是JSESSIONID

@WebServlet("/set_jsessionId")
public class Demo03SetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //打开浏览器,向服务器发一个jsessionID,让服务器根据jsessionID打开之前的session
        //取里面的数据,得使用技术保存jsessionID在浏览器 Cookie



        //1 获取session对象
        HttpSession session = request.getSession();
        //2 获取session的编号jsessionId
        String jsessionId = session.getId();

        //3 保存key-value
        session.setAttribute("name","jack");
        session.setAttribute("age","20");

        response.getWriter().println(jsessionId);

        Cookie cookie = new Cookie("JSESSIONID",jsessionId);

        //存活时间
        cookie.setMaxAge(10*60);

        //项目地址
        cookie.setPath(request.getContextPath());

        response.addCookie(cookie);

    }
}

Session的失效

session.invalidate(); //让session失败,原来里面的数据都没有了

@WebServlet("/clear")
public class Demo04SetServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //invalidate()清除失效
        HttpSession session = request.getSession();
        session.invalidate();

    }
}

Session的钝化与活化(了解)

  • tomcat 中关闭服务会自动把session持久化 也叫钝化,反之叫活化
  • 本持是将session数据 存储在work目录下的一个session.ser

在这里插入图片描述

  • 使用idea发布工程的朋友查看log控制台找work目录
    在这里插入图片描述
    我的文件下如下在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u013621398/article/details/108534879