欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSP & Servlet - 5.Session技术

程序员文章站 2024-03-20 12:25:52
...

Session技术

Request对象解决了一次请求内不同的Servlet数据共享问题, 那么一个用户不同请求的处理需要使用相同数据就要使用到session技术。

1. Session简介

1.1 session原理

​ 用户使用浏览器第一次向服务器发送请求,服务器在接收到请求后没调用对应的Servlet进行处理。在处理过程中会给用户创建一个session对象,用来存储用户请求处理相关的公共数据,并将此Session对象的JSESIONID以COokie的形式存储在浏览器中(临时存储,浏览器关闭即失效)。用户在发起第二次请求后续请求直接根据JSESIONID获取到session对象,保证不同请求获取共享数据。

1.2 session特点

  • 存储在服务器端
  • 服务器进行创建
  • 依赖Cookie技术
  • 生命周期为一次会话
  • 默认存储时间为30分种(在指定的时间内使用后,重新计时)

1.3 session作用

​ 解决了一个用户不同请求处理的数据共享问题。

2. Session的使用

@WebServlet("/mySession1")
public class SessionTestServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
    //创建/获取session对象,session默认存储时间为30分钟
		HttpSession s = req.getSession();
    //设置存储时间为1天,单位为秒
    s.setMaxInactiveInterval(24*60*60);
    //设置session存储数据
		s.setAttribute("name", "mySession");
	}
}

@WebServlet("/mySession2")
public class SessionTestServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //创建/获取session对象
    	HttpSession s = req.getSession();
      //从session中取出存储数据
    	String name = (String)s.getAttribute("name");
    	System.out.println(name);
      //强制session失效
      s.invalidate();
    }
}
/*output:
mySession
*/
  • HttpSession hs = req.getSession();

    如果请求中拥有session标识符(JSESSIONID),则返回其对应的session队形。

    如果请求中没有session标识服,则创建新的session对象,并将其JSESSIONID作为cookid数据存储到浏览器内存中(临时存储)。

    如果之前的session对象失效了,也会重新创建一个新的session对象,并将其JSESSIONID存储到浏览器内存中

  • 在tomcat中统一修改session存储时间

    <session-config>
      <session-timeout>30</session-timeout>
    </session-config>