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>
然後就不會有可以返回的頁面了。