我們知道在正常情況下,發(fā)送http請求時,消息頭中會自動攜帶cookie信息,這其中就會包括SESSIONID信息,所以只要我們沒有關閉瀏覽器,消息頭中都會自動攜帶這個信息,以供服務器訪問相應的session。 但是如果我把瀏覽器關閉了呢?這樣的話,我該如何再次訪問相應的session呢?
我們可以這樣做,來實現(xiàn)這個需求(結合cookie)
//在servletA中設置cookie
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession session = request.getSession();
session.setAttribute("name", "張三");
out.println("創(chuàng)建一個session并放入姓名屬性");
//手動添加cookie,保存JSESSIONID信息
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*30);//設置cookie的生命周期為30min 相應 給瀏覽器一個 session id
response.addCookie(cookie);
}
//在servletB中就可以正常訪問session了
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
HttpSession httpSession = request.getSession();
String name = (String) httpSession.getAttribute("name");
out.println("name = "+name);
}
我們來分析為什么可以這樣做?
首先,session的聲明周期是可以自己來設置的,默認的是30分鐘,那么當我們關閉瀏覽器之后,這個瀏覽器對應的session其實還沒有消亡,(如果我們需要它消亡的話,我們可以調(diào)用invalidate方法,這也是網(wǎng)站中的安全退出常見操作之一)。既然沒有消亡,為什么關閉瀏覽器之后,我們就訪問不到了呢?那是因為cookie中的JSESSIONID信息沒有了,不會自動攜帶這個session信息了,服務器找不到對應的session,就會自動添加新的session,這個新添加的session顯然不是我們需要的。所以,我們就可以利用cookie來實現(xiàn)這個需求。只要我們手動為cookie中添加JSESSIONID信息,那么不管你的瀏覽器是否關閉,我的cookie中都會攜帶JSESSION信息,這樣的話,服務器就一定能夠找到對應的session,而不會重新建立一個新的session,這樣只要session沒有消亡,就一定可以訪問到對應的session。
|