目录
3.1客户端关闭后,服务器不关闭,两次获取到的session不是同一个
3.2客户端不关闭,服务器关闭后,两次获取到的session不是同一个
服务器端会话技术,在一次会话的多次请求之间共享数据,将数据保存在服务器端的对象中,HttpSession。
Session的实现是依赖于Cookie的

先获取HttpSession对象:
HttPSession session =request.getSession();
使用HttpSession对象
Object getAttribute(String name)
void setAttribute(String name,Object value)
void removeAttribute(String name)
- @WebServlet("/setSession")
- public class SetSession extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- session.setAttribute("name","pwd");
- }
- }
- @WebServlet("/getSession")
- public class GetSession extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- Object name = session.getAttribute("name");
- System.out.println(name);
- }
- }
先在浏览器访问/setSession,再访问/get/Session
当访问//setSession时,由于是第一次访问,请求头是不带参数的,但是响应头中有set-Cookie


(1)session用于存储一次会话的多次请求的数据,Cookie存在服务器端
(2)session没有数据大小限制,Cookie有限制
- @WebServlet("/demo")
- public class Demo extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- System.out.println(session);
- System.out.println("------------------");
- }

如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
- @WebServlet("/demo")
- public class Demo extends HttpServlet {
- @Override
- protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- HttpSession session = req.getSession();
- System.out.println(session);
- System.out.println("------------------");
- Cookie cookie = new Cookie("JSESSIONID",session.getId());
- cookie.setMaxAge(10);
- resp.addCookie(cookie);
- }
- }

为了确保数据不丢失有了以下两种措施
i:Session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
ii:Session的活化:在服务器启动后,将Session文件转化为内存中的session对象即可
i:服务器关闭
ii:session对象调用invalidate();
iii:tomcat的web.xml中session默认失效时间(30分钟)过后;