跳轉到內容

WebObjects/Web 應用程式/開發/回溯

來自華夏公益教科書,開放的書籍,開放的世界

當使用 WebObjects 的元件操作時,為了能夠跨請求保留狀態,伺服器必須維護一個先前訪問頁面的快取。 此頁面快取的大小有限。 因此,如果使用者多次按下後退按鈕,以至於耗盡此快取,將導致“使用者回溯太遠”錯誤。

使用直接操作進行預防

[編輯 | 編輯原始碼]

因為直接操作不需要像元件操作那樣的頁面狀態,所以避免回溯問題的最佳方法是在應用程式中使用 程式設計:WebObjects/Web 應用程式/開發/直接操作

舊會話和回溯

[編輯 | 編輯原始碼]

如何最簡單地阻止使用者回溯(使用瀏覽器後退按鈕)到先前由已登出的另一個使用者使用的頁面?

為了防止使用者在使用後退按鈕時訪問他人的會話,您應該在登出操作中呼叫 session().terminate()。 為了使其正常工作,您必須在呼叫 terminate() 後重定向到沒有會話的頁面,因為如果您使用 pageWithName() 返回另一個頁面,該頁面將引用您剛剛終止的會話,並且它將無法工作。 我的登出操作看起來像這樣

 public WOComponent logout() {
   WORedirect redirect = (WORedirect)pageWithName("WORedirect";);
   redirect.setUrl("/cgi-bin/WebObjects/MyApp";); // entry point
   session().terminate();
   return redirect;
 }

如果有人使用後退按鈕,這將阻止會話工作,但它不會阻止他們檢視頁面上的內容。 如果敏感內容是問題所在,那麼最好的辦法是在使用者登出時關閉視窗。 這將假設當他們登入時,您為要執行的應用程式的敏感部分打開了視窗。 這樣,當您使用 javascript 關閉它時,您不會觸發使用者可以攔截的警告訊息。 對於您開啟的視窗,您可以像上面一樣重定向到一個看起來像這樣的 html 頁面

  <HTML>
  <HEAD>
    <TITLE>Closing Window...</TITLE>
  </HEAD>
  <BODY onLoad="window.close()">
  </BODY>
  </HTML>

然後就不會有可以返回的頁面了。

華夏公益教科書