2011-12-20 120 views
4

我在「我的網頁」上單擊「提交」按鈕,顯示一條消息「您未登錄」。當然,對於登錄的用戶,我想而不是顯示消息。我用這種方式編碼:如何處理退出後單擊「返回」按鈕的用戶

<c:if test="${someCondition}"> 
addMsgToButtonEvent(); 
</c:if> 

它的工作(幾乎)完美。但是,現在當用戶登錄和:

  1. 點擊退出(這是在我的頭和重定向另一頁上)
  2. 點擊「返回」按鈕,在瀏覽器上

消息沒有出現,因爲我的頁面沒有再次渲染,addMsgToButtonEvent沒有被調用。我知道我可以通過清除歷史記錄來阻止「返回」按鈕 - 但這在業務需求方面會發生很大的變化。這是對這個問題的一些軟和有效的解決方法嗎?


編輯:

我想對於這樣的問題,最好的辦法是無效會話登出之後。我是這樣做的。

+0

[防止用戶可能重複(註銷後)(http://stackoverflow.com/questions/419 4207 /防止用戶從退回到先前受保護的頁面後註銷) – BalusC 2011-12-20 12:53:33

回答

3

我有類似的ASP.Net網站和登錄控制問題。

你可以meta標籤添加到HTML告訴瀏覽器不緩存它 - 因此後退按鈕會導致頁面無法正常服務器重裝:

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE"> 
<meta http-equiv="EXPIRES" content="0"> 

希望可能會有所幫助: )

+2

當具有相同名稱的HTTP響應頭已經存在時,這不起作用。緩存控制值也不完整,並且在大多數瀏覽器上無法正常工作(請閱讀:非MSIE瀏覽器)。另請參閱http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407 – BalusC 2011-12-20 12:52:22

+1

@BalusC我向你的上級知識鞠躬主題:) – 2011-12-20 13:16:36

0

如果緩存問題以下行添加到您的JSP

<% 
response.setHeader("Cache-Control","no-cache no-store"); //HTTP 1.1 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
%> 

的頂部。如果不解決這個問題......你可能想看看你是如何手顯示代碼和會話失效。

最好的辦法是:

當你創建一個會話分配一個指定的屬性 爲了打印語句檢查指定屬性 的存在,如果發現指定的屬性...其他打印信息不做到這一點 在註銷...做session.invalid()

讓我知道什麼工作......我們可以回到以前的安全頁面深入挖掘這個

+0

緩存控件屬性不完整。你需要一個「必須重新驗證」。另見http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers/2068407#2068407 – BalusC 2011-12-20 12:53:13