使用 URL 重寫跟蹤會話

來源:互聯網
上載者:User

在某些情況下,若是不能使用Cookie追蹤記錄使用者會話的話,就必須使用URL重寫來跟蹤會話。使用 URL 重寫跟蹤會話的應用程式必須遵循某些編程準則。應用程式開發人員需要:

  • 對會話小服務程式進行編程以編碼 URL
  • 提供小服務程式或 JSP 檔案作為應用程式的進入點
  • 避免在應用程式中使用普通 HTML 檔案
對會話小服務程式進行編程以編碼 URL

根據小服務程式是將 URL 返回到瀏覽器,還是將它們重新導向,在小服務程式代碼中包括 encodeURL( ) 或 encodeRedirectURL( )。這裡是您當前放在小服務程式代碼中的樣本示範。

重寫 URL 以返回瀏覽器

假設您當前有語句:

out.println("catalog");

在將 URL 發送到輸出資料流之前,更改小服務程式以調用 encodeURL 方法。

out.println("catalog");
重寫 URL 以重新導向

假設您當前有下列語句:

response.sendRedirect ("http://myhost/store/catalog");

在將 URL 發送到輸出資料流之前,更改小服務程式以調用 encodeRedirectURL 方法。

response.sendRedirect (response.encodeRedirectURL ("http://myhost/store/catalog"));

encodeURL() 和 encodeRedirectURL() 方法是 HttpServletResponse 對象的一部分。這些調用在對 URL 進行編碼之前將檢查是否配置了 URL 重寫。如果未配置,則返回原始的 URL。

如果啟用了 cookie 和 URL 重寫,而且調用了 response.encodeURL() 或 encodeRedirectURL(),即使做 HTTP 要求的瀏覽器處理了會話 cookie,也將編碼該 URL。

您也可以配置會話支援來啟用協議開關重寫。當啟用了此選項,該產品將使用會話標識來編碼 URL,以在 HTTP 和 HTTPS 協議間轉接。要獲得詳細資料,請參閱相關資訊。

提供小服務程式或 JSP 檔案作為進入點

應用程式的進入點(如啟動顯示畫面所顯示的)可能不需要使用會話。然而,如果應用程式在會話建立後通常需要會話支援(這意味著它的某些部分(如小服務程式)需要會話支援),則所有的 URL 必須是已編碼的以使需要該會話支援的小服務程式(或其它應用程式組件)持續保留該會話標識。

下例顯示了如何在 JSP 檔案中嵌入 Java 代碼:

避免在應用程式中使用普通 HTML 檔案

注,使用 URL 重寫來維護工作階段狀態,請勿從普通 HTML 檔案(帶有 .html 或 .htm 副檔名的檔案)連結到您部分的應用程式。

因為普通 HTML 檔案中無法使用 URL 編碼,所以這種限制是必需的。為了使用 URL 重寫來維持狀態,使用者在該會話期間所請求的每個頁面都必須具有 Java 解譯器所能理解的代碼。

如果會話期間使用者可能訪問的應用程式(或 Web 應用程式)或部分網站中含有這種普通 HTML 檔案,則請將它們轉換成 JSP 檔案。

這將影響到應用程式編寫者,因為如上述描述,用 URL 重寫維護會話要求應用程式中的每個小服務程式必須對 標記上的每個 HREF 屬性使用 URL 編碼。

如果應用程式中的一個或多個小服務程式不調用 encodeURL(String url) 或 encodeRedirectURL(String url) 方法,將丟失會話。

附:javax.servlet.http.HttpServletResponse的兩個方法

encodeRedirectURL

public String encodeRedirectURL(String url);

  對sendRedirect方法使用的指定URL進行編碼。如果不需要編碼,就直接返回這個URL。之所以提供這個附加的編碼方法,是因為在redirect的情況下,決定是否對URL進行編碼的規則和一般情況有所不同。所給的URL必須是一個絕對URL。相對URL不能被接收,會拋出一個IllegalArgumentException。

  所有提供給sendRedirect方法的URL都應通過這個方法運行,這樣才能確保會話跟蹤能夠在所有瀏覽器中正常運行。

encodeURL

public String encodeURL(String url);

  對包含session ID的URL進行編碼。如果不需要編碼,就直接返回這個URL。Servlet引擎必須提供URL編碼方法,因為在有些情況下,我們將不得不重寫URL,例如,在響應對應的請求中包含一個有效session,但是這個session不能被非URL的(例如cookie)的手段來維持。

  所有提供給Servlet的URL都應通過這個方法運行,這樣才能確保會話跟蹤能夠在所有瀏覽器中正常運行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.