Servlet入门(七)Session对象

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/84329790

前言

      本章学习Session对象的相关知识

方法

1.概念

我们知道,request对象解决了同一个请求不同servlet的数据共享问题。那么,同一用户下的不同请求的数据该如何共享呢?那么就需要用到Session对象的相关知识了!实质上,它也用到了cookie技术。为什么这么说呢,用户使用浏览器第一次向服务器发送请求,服务器在接受到请求后,调用对应的 Servlet 进行处理。在处理过程中会给用户创建一个 session 对象,用来存储用户请求处理相关的公共数据,并将此 session 对象的 JSESSIONID 以 Cookie 的形式存储在浏览器中(临时存储,浏览器关闭即失效)。用户在发起第二次请求及后续请求时,请求信息中会附带 JSESSIONID,服务器在接收到请求后,调用对应的 Servlet 进行请求处理,同时根据 JSESSIONID 返回其
对应的 session 对象。

2.特点

1)它存储在服务器端,这与cookie不同(cookie存储于浏览器端)

2)它依赖于cookie,存储浏览器端JSSESSIONID

3)它的有效期为一个会话,即浏览器关闭即消失

3.使用

1)获取session对象

我们知道,用户发送一次请求,如果没有session对象就会自动创建新的session对象,我们可以通过request对象间接获取session对象

HttpSession session = request.getSession();

2)设置session对象的有效时间

cookie可以设置有效时间,那么session依赖于cookie,同样可以设置有效时间,但是浏览器关闭session仍然消失

仍然需要注意的是session在浏览器关闭后会立刻失效,它代表着一次会话!

session.setMaxInactiveInterval(时间(s));

误区:

     大家可能认为,我设置了session的有效期是30s,那么30s之后就会自动销毁!这是不对的,前提是你没有发新的请求,才在30s之后进行销毁,如果你在30s之内发送了新的请求,那么session的有效期将重新变为30s

3)强制session失效

我们可以通过session对象的一个方法强行让该session失效

session.invalidate();

4)使用session存储公共数据

我们知道,cookie可以存储共享的数据,那么session又是怎么存储一个会话的共享数据呢?

它使用setAttribute(键,值);设置数据,使用getAttribute(键)获取数据

实例:使用session存储登录用户名

package com.jwang.student.servlet;

import com.jwang.student.bo.User;
import com.jwang.student.service.UserService;
import com.jwang.student.service.impl.UserServiceImpl;

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;

@WebServlet("/login.do")
public class UserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response){
        try {
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            HttpSession session = request.getSession();
            request.setCharacterEncoding("UTF-8");
            UserService userService = new UserServiceImpl();
            User user = new User("01", username, password);
            if (userService.login(user)) {
                session.setAttribute("username",username);
                request.getRequestDispatcher("/success.jsp").forward(request, response);
            } else {
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }
        }catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response){
        this.doGet(request, response);
    }

}

这样,前台就能获取到后台传递的session对象的值

注意:使用cookie同样实现了数据的共享,相对而言,session存储更加安全,cookie适合存储无关重点的数据!

总结

session和cookie异同

  • session依赖于cookie技术
  • session是服务器端的存储数据方式,cookie是浏览器端的数据存储方式
  • session可以存储大量的数据且安全,cookie只能存储少量数据且不安全
  • session对象浏览器关闭即失效,它属于临时cookie,cookie可以通过设置有效时间的方式达到关闭浏览器仍然生效的目的

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/84329790
今日推荐