A.保存session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。 Servlet 容器將 Session ID 作爲 Cookie 保存在客戶的瀏覽器中。每次客戶發出 HTTP 請求時,Servlet 容器可以從 HttpRequest 對象中讀取 Session ID,然後根據 Session ID 找到相應的 HttpSession 對象,從而獲取客戶的狀態信息。
B.當客戶端瀏覽器中禁止 Cookie,Servlet 容器無法從客戶端瀏覽器中取得作爲 Cookie 的 Session ID,也就無法跟蹤客戶狀態。 Java Servlet API 中提出了跟蹤 Session 的另一種機制,如果客戶端瀏覽器不支持 Cookie,Servlet 容器可以重寫客戶請求的 URL,把 Session ID 添加到 URL 信息中。 HttpServletResponse 接口提供了重寫 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
該方法的實現機制爲:1 先判斷當前的 Web 組件是否啓用 Session,如果沒有啓用 Session,直接返回參數 url。
2 再判斷客戶端瀏覽器是否支持 Cookie,如果支持 Cookie,直接返回參數 url;如果不支持 Cookie,就在參數 url 中加入 Session ID 信息,然後返回修改後的 url。
舉例:我們可以對網頁中的鏈接稍作修改,解決以上問題:
修改前:
<a href=“maillogin.jsp“>stepAnotherServlet</a>
修改後:
<a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>stepAnotherServlet </a>
如果你需要使用重定向,可以使用 response.encodeRedirectURL () 來對 URL 進行編碼。