所以使用者登出後,按下"回上一頁"幾乎都可以看到登出前瀏覽過的資料。
要避免使用者登出後使用"回上一頁"功能,最簡單的方式就是讓頁面不被快取,
在網路上找了一些方法,都是在<head></head>裡面加上:
//將網頁設為立即過期。 <meta http-equiv="Expires" content="0" /> //舊寫法,為了增加相容性。 <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma-directive" content="no-cache" /> <meta http-equiv="Cache-Directive" content="no-cache" />
不過這樣做,不知道為什麼在 IIS 6 的環境上,執行 ASP.NET MVC 的 Web Application 還是可以讓使用者按下"回上一頁"...
後來發現也可以直接加在 http response headers 上,
因此,改寫了一下專案裡面 base Controller 在 Initialize 時,設定 Response 的 cache 設定,設定如下:
protected override void Initialize(RequestContext requestContext) { base.Initialize(requestContext); requestContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache); requestContext.HttpContext.Response.Cache.SetExpires(DateTime.MinValue); requestContext.HttpContext.Response.Cache.SetNoStore(); }比較一下兩者狀況,
僅在頁面加上<meta...的方式:
圖上半部是程式部份,下半部是 Chrome 的開發人員工具檢視 http headers 的狀態。
瀏覽器一樣可以在登出後回上一頁。
直接在 http headers 告訴瀏覽器,不要快取:
登出後回上一頁,都會重新 request 頁面,
只要頁面需要檢查是否登入,基本上都回不去了。
問題解決...
沒有留言:
張貼留言