天天看點

JSP實作在浏覽器關閉cookies情況下的會話管理

通常,會話管理是通過伺服器将 Session ID 作為一個 cookie 存儲在使用者的 Web 浏覽器中來唯一辨別每個使用者會話。如果浏覽器不支援 cookies,或者将浏覽器設定為不接受 cookies,我們可以通過 URL 重寫來實作會話管理。

  實質上 URL 重寫是通過向 URL 連接配接添加參數,并把 session ID 作為值包含在連接配接中。然而,為使這生效,你需要為你的 servlet 響應部分的每個連接配接添加 session ID 。

   把 session ID 加到一個連接配接可以使用一對方法來簡化:response.encodeURL() 使 URL 包含 session ID,如果你需要使用重定向,可以使用 response.encodeRedirectURL () 來對 URL 進行編碼。

  encodeURL () 及 encodeRedirectedURL () 方法首先判斷 cookies 是否被浏覽器支援;如果支援,則參數 URL 被原樣傳回,session ID 将通過 cookies 來維持。

  來看下面的例子,兩個 JSP 檔案:hello1.jsp 和 hello2.jsp,及它們之間的影響。我們在 hello1.jsp 中簡單的建立一個會話,并在 session 中存儲一個對象執行個體。接着使用者可以點選頁面的連接配接到達 hello2.jsp。在 hello2.jsp 中,我們從 session 中擷取原先放置的對象并顯示它的内容。注意,我們在 hello1.jsp 中調用了 encodeURL() 方法來獲得 hello2.jsp 的連結,使得在浏覽器停用 cookies 的情況下,session ID 自動添加到 URL,hello2.jsp 仍能得到 session 對象。

  首先在啟用 cookies 的情況下運作。然後關閉對 cookie 的支援,重新開機浏覽器,再運作一次。每次你都可以看到會話管理在起作用,并能在頁之間傳遞資訊。

注意,如果你想讓這個例子能在關閉了 cookies 的浏覽器中工作,你的 JSP 引擎必須支援 URL 重寫。

hello1.jsp

<%@ page session="true" %>

<%

Integer num = new Integer(100);

session.putValue("num",num);

String url =response.encodeURL("hello2.jsp");

%>

<a href='<%=url%>'>hello2.jsp</a>

hello2.jsp

<%@ page session="true" %>

<%

Integer i= (Integer)session.getValue("num");

out.println("Num value in session is "+i.intValue());

%>