客户端会话技术cookie是保存在客户端浏览器的,那么与之相对的服务器端会话技术session是保存在服务器端的。
会话技术旨在数据的共享,下面一段session的代码演示:
@WebServlet("/servletSession01")
public class ServletSession01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session对象
HttpSession session = request.getSession();
session.setAttribute("name","zhangsan");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
资源类2:
@WebServlet("/servletSession02")
public class ServletSession02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();//获取session
String name = (String) session.getAttribute("name");
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
服务器如何确保在一次会话范围内多次获取的session对象是同一个?

第一次请求资源类1的响应头:

第一次请求资源类2请求头:

可以看出两幅图的JSESSIONID是相同的
代码如下:
@WebServlet("/servletSession02")
public class ServletSession02 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();//获取session
String name = (String) session.getAttribute("name");
Cookie cookie=new Cookie("JSESSIONID",session.getId());//手动设置依赖cookie
cookie.setMaxAge(60*5);//设置依赖cookie的存活时间为5分钟
response.addCookie(cookie);
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
2.客户端不关闭服务器关闭:
在idea中访问的并不是同一个,但是在实际开发中这样访问的其实会是同一个session对象,原因是:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
原文:https://www.cnblogs.com/ZYH-coder0927/p/13700729.html