程序员社区

【Servlet-0】服务器端会话技术Session

1.概念:
服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。

2.快速入门:
 1.获取HttpSession对象:
  HTTPSession session = request.getSession();
 2.使用HTTPSession对象:
  1.Object setAttribute(String name,Object value)
  2. void getAttribute(String name)
  3. void removeAttribute()

@WebServlet("/SessionDemo1")
public class SessionDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用Session共享数据
        //获取Seesion
        HttpSession session = request.getSession();
        //存储数据
        session.setAttribute("msg","hello");
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
@WebServlet("/SessionDemo2")
public class SessionDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //使用Session共享数据
        //获取Seesion
        HttpSession session = request.getSession();
        //获取数据
       Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

3.原理:
Session的实现是依赖于Cookie的

4.细节学习:
 1.当客户端关闭后,服务器不关闭两次获取的Session是同一个吗?
 默认情况下不是的:运行SessionDemo3再关闭浏览器重新运行,两次打印的结果不同

@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Seesion
        HttpSession session = request.getSession();
        System.out.println(session);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

如果需要相同,则可以创建Cookie,键为JSESSIONID,设置Cookie的最大存活时间,让Cookie持久化存活,这样运行SessionDemo3关闭后再重新执行得到的结果相同
Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);

@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Seesion
        HttpSession session = request.getSession();
        System.out.println(session);

        //期望客户端关闭后,session也能相同
        Cookie c = new Cookie("JSESSIONID",session.getId());
        c.setMaxAge(60*60);
        response.addCookie(c);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

2.客户端不关闭,服务器关闭后,两次获取的Session是同一个吗?
  不是同一个,但是要确保数据不丢失

3.Seesion的默认失效时间?
  1.服务器关闭
  2.session 对象调用invalidate()
  3.session30分钟之后会自动失效
5.session的特点:
  1.session用于存储一次会话的多次请求的数据,存储在服务器端
  2.session可以存储任意类型,任意大小的数据
 session与cookie的区别:
  1.session存储数据在服务器端,Cookie在客户端
  2.session没有数据大小限制,Cookie有限制

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 【Servlet-0】服务器端会话技术Session

相关推荐

  • 暂无文章

一个分享Java & Python知识的社区