Servlet之HttpSession对象

HttpSession对象

对于服务器而言,每一个连接到它的客户端都是一个 session,servlet 容器使用此接口创建 HTTP 客户端和 HTTP 服务器之间的会话。
Session 的作用就是为了标识一次会话,或者说确认一个用户;并且在一次会话(一个用户的多次请求)期间共享
数据。我们可以通过 request.getSession()方法,来获取当前会话的 session 对象。

  Session对象
       1. Session对象的获取
          request.getSession();
           如果session对象存在,则直接获取;如果session对象不存在,则新建session
       2. JSESSIONID标识符
           当请求到达服务器时,如果使用了session,服务器会去获取一个JSESSIONID的cookie对象
           如果cookie对象不存在,则新建session对象,并设置sessionId,将sessionId回传给客户端中,设置对应的cookie
           如果cookie对象存在,服务器会比较客户端传递的sessionID是否与服务端的一致
               如果不一致,新建session对象,并设置sessionId,将sessionId回传给客户端中,重新设置对应的cookie
               如果一致,则获取到当前session对象
           Session底层是依赖cookie的,默认关闭浏览器失效。
       3. session作用域
           在一次会话有效,可以有多次请求和响应,在会话中数据共享。
           setAttribute()
           getAttribute()
           removeAttribute()
 
           request作用域
               一次请求中有效,在请求转发中有效,在重定向失效
           session作用域
               一次会话中有效,无论请求转发还是重定向都有效,会话销毁则失效
 
       4. session的销毁
           1. 关闭服务器
           2. 关闭浏览器
               session底层依赖cookie,cookie默认只在浏览器中存活,浏览器关闭则失效
           3. 默认最大不活动时间
                当指定时间内没有任何操作,则session对象失效;在时间未到达之前有操作,则会重新计时
               服务器中设定了session的最大不活动时间,Tomcat服务器设置的是30分钟
               在Tomcat的解压目录的conf中web.xml配置文件中
                   <!-- session 默认的最大不活动时间。单位:分钟。 -->
                   <session-config>
  	                    <session-timeout>30</session-timeout>
                   </session-config>
           4. 手动设置失效时间
               通过session.setMaxInactiveInterval(int) 来设定 session 的最大不活动时间,单位为秒。
               通过getMaxInactiveInterval()方法获取当前最大不活动时间
           5. 手动销毁
               session.invalidate();
@WebServlet("/se01")
public class Session01 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取session对象
        HttpSession session = req.getSession();
        /**
         * 常用方法
         */
        System.out.println("SessionId:" + session.getId());
        System.out.println("会话创建时间:" + session.getCreationTime());
        System.out.println("最后一次访问时间:" + session.getLastAccessedTime());
        System.out.println("是否是新的对象:" + session.isNew());
        /**
         * 设置作用域
         */
        // 设置request作用域
        req.setAttribute("name","request");
        // 设置session作用域
        session.setAttribute("name2","session");
		/**
         * 获取作用域
         */
        // request作用域
        System.out.println(req.getAttribute("name"));
        // session作用域
        System.out.println(session.getAttribute("name2"));
        /**
         * session的销毁
         */
        // 获取最大不活动时间
        int sec = session.getMaxInactiveInterval();
        System.out.println("最大不活动时间:" + sec);
        // 设置最大不活动时间
        session.setMaxInactiveInterval(20); // 20秒失效

        // 手动销毁
        session.invalidate();
        // 请求转发 (一次请求)
        // req.getRequestDispatcher("se02").forward(req,resp);
        // 重定向(两次请求)
        resp.sendRedirect("se02");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值