学session,看这一往篇就够了

学session,看这一往篇就够了

Session的原理:

在这里插入图片描述

原理:

  • 服务器为浏览器分配一种对象叫session
  • 每个session有id,可以存key-value
  • 为了每个浏览器访问自己的数据不受他人影响,必须让Cookie存jessionld

Session存数据

  • 获取Session
    HttpSession getSession()获取session对象

  • 存数据
    setAttribute(key,value)

  • 读数据
    getAttribute(key)

存session代码:

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessionSetServlet")
public class SessionSetServlet 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();
        session.setAttribute("name","jack");
        session.setAttribute("age","18");
        //2获取session的编号jsession工d
        String jsessionId = session.getId();
        response.getWriter( ).println(jsessionId);
    }
}

效果图:

在这里插入图片描述

##取session代码:

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessionGetServlet")
public class SessionGetServlet 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:

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

    扫描二维码关注公众号,回复: 11656055 查看本文章
  • getSession()先根据jsessionld查找是否之前有session存在,如果有就重用该session,否则就创建一个新的。

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

存的代码如下:

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/sessionStoreServlet")
public class SessionStoreServlet 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);

    }
}

取的代码:

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/sessionGetServlet")
public class SessionGetServlet 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);

    }
}

运行效果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

关闭浏览器后,还可以再取到!

清除Session

使用session的session.invalidate();方法可以清除session

完成代码如下:

package com.lbl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

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

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取session对象
        HttpSession session = request.getSession();
        //1:清除session
        session.invalidate();
    }
}

Session的钝化与活化

  • tomcat中关闭服务会自动把session持久化也叫钝化

  • 本质是将session数据存储在work目录下的一个session.ser

  • 使用idea发布工程的朋友查看log控制台找work目录:

在这里插入图片描述

图解:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37924905/article/details/108537820