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有限制