2010-03-17 117 views
1

基本上,當用戶在瀏覽器中單擊「返回」(或使用鍵控件)時,無法訪問我構建的此網站上的所有頁面,並且頁面應該在正試圖回溯歷史。ASP.Net:導航返回時頁面過期

我投入的Global.asax ::的Application_BeginRequest

Response.Cache.SetCacheability(HttpCacheability.NoCache) 
    Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)) 
    Response.Cache.SetValidUntilExpires(False) 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches) 
    Response.Cache.SetNoStore() 

這將清除高速緩存,並禁止回去當用戶登錄任何網頁,但不這樣做,而用戶工作英寸

我看到人們使用提出了JavaScript的方法,帖子在頁面上調用

History.Forward(1) 

記錄。但我不想這樣做,因爲它需要javascript啓用工作(哪個用戶可以禁用)。

欣賞任何建議。

+0

我相信答案在這裏:http://stackoverflow.com/questions/64059/is-there-a-way-to-keep-a-page-from-rendering-once-a-person-has-註銷但打了/ 217117#217117 –

回答

3

您可以一致地做到這一點的唯一方法是如果您使用的是https。如果沒有,您無法強制瀏覽器不使用緩存頁面。有你提到的黑客,但他們並不完全證明。如果它非常重要,請使用https,因爲每個請求都會強制重新加載。

+0

同意。您可以控制Web服務器上的頁面過期(通過頭文件/元數據或代碼),但您無法對客戶端和網絡持久性行爲(bowsers緩存,代理緩存...)進行任何操作。 – JoeBilly

+0

謝謝。感謝您的建議。 只需添加,網站已經在使用https。是的,就像Kelsey提到的那樣,它強制重新加載,但我仍然可以單擊重新發送(在Firefox上),並且發佈的數據將因此重新發送,並且頁面將重新加載數據。在沒有任何帖子的頁面上,它甚至沒有確認,只是顯示頁面。 我做了更多的查找,似乎這是一個常見問題,但沒有一個真正的解決方案。像我之前提到的javascript似乎是迄今爲止最常用的解決方法。我想沒有其他已知的方法? – K2so

0

經過大量的時間花在調查和試用之後,我實施了一種解決方法,並決定分享它,以防其他人可能覺得它有用。這(最接近的解決方案,但只用在Firefox除外)替代方法將導致:

  1. IE6 - 8:「頁面過期」出現
  2. 鉻:「確認重新提交表單」來了
  3. 火狐:一個對話框會來,詢問重新發送POST數據

解決方法:

  1. 隨着上述
  2. 更改發佈的所有超鏈接到不同的網頁的網站來的LinkBut​​ton內原來的問題中列出的Response.Cache設置。
  3. LinkButton中將PostBackURL設置爲鏈接href URL。這是必要的,因爲只有POST和我們設置的標題一起,瀏覽器纔會使歷史記錄中的原始發佈頁面過期並要求重發。
  4. 而不是在後面的代碼中使用Response.Redirect,使用Server.Transfer,因爲Response.Redirect將使用GET到另一頁。

此解決方案不禁止用戶導航回到歷史頁面,但是是否確認是否要再次發佈數據。正如原文所述,History.Forward(1)不能很好地工作,並且我還認識到可以自動重新發布到沒有任何警告的頁面,基本上會導致多個請求提交給服務器。

主要想法是POST到每個頁面而不是GET,因此每次訪問該網站的頁面在導航返回時都會進入Page Expired頁面。現在用戶可以隨時刷新以重新發布數據。