[ASP.NET] 登出後,避免按上一頁,顯示Cache頁面

  • 6941
  • 0
一般實做網站時,會員系統會用Session作為會員登入的驗證依據,登出後,只要在後端執行清除Session的動作,另外在各項頁面控制檢查,如果不存在Session,則利用Response.redirct的方式導回Login畫面,以做好權限控管的動作。

然而,瀏覽器為了執行的速度,會有頁面快取(cache)的機制,讓你按上一頁,可以快速恢復之前頁面,但這機制對於權限控管的確不是一件好事情,登出後應該不能夠再看到管理介面的資訊。
在每一個登入後的頁面Page_Load 做Session檢查,如果不存在,則導回一般未登入前畫面。

但會有一個問題:如果登出後按上一頁,快取的狀況,會讓使用者可以看到上一頁的畫面,要按下F5才會進到Page_Load的檢查機制。

所以在登出後,有幾種作法
1. 登出後,直接關閉視窗 (via [技術] 登出後點選上一頁的問題),關閉視窗後,快取的確不存在,因為上一頁的控制機制在瀏覽器的「歷史紀錄清單」內。

但這作法有點Stupid,你應該不希望使用者就此跟你說掰掰,或者對方要換個帳號登入,這時怎麼辦?

2. 保哥有個作法(限IE使用),去清掉IE的歷史紀錄清單(via 如何透過 JavaScript 取消 IE 的「回上一頁」功能) ,目的讓使用者不能再按上一頁。這方法測試過,好像不太管用?

3. 找到國外其他網站的方法,直接在Meta Page Header設定,把Cache的功能關掉就可以了。
在Page_Load() 加入下列語法 (VB.NET適用,C# 只要在後面加; 即可),測試結果Google Chrome, IE9 皆適用。

HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache)
HttpContext.Current.Response.Cache.SetNoServerCaching()
HttpContext.Current.Response.Cache.SetNoStore()

相關連結: