2009-02-23 87 views
5

我有一個使用Forms Authentication的ASP.NET應用程序。當用戶單擊頁面上的註銷按鈕時,它將運行以下代碼。註銷後退箭頭

 FormsAuthentication.SignOut(); 
     Response.Expires = 0; 
     Response.Cache.SetNoStore(); 
     Response.AppendHeader("Pragma", "no-cache"); 

但是,用戶仍然可以只按下後退箭頭,而無需再次登錄就可以看到前一頁。我確信它與上一頁緩存有關。我怎樣才能確保他們提示重新登錄?

+0

一種方法做的是,寫的無緩存代碼中的所有頁面,但我也在尋找更好的方法來到期的內容。 +1 – Ramesh 2009-02-23 21:09:46

回答

5
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
1

現在你知道你爲什麼會收到這條消息:「你已經註銷,請出於安全原因關閉瀏覽器窗口。」

沒有緩存是一種解決方法。

倒數第二個解決方法是使用ajax來拉取所有敏感信息 - 這將在後面的情況下再次運行,並且信息不應該被緩存。這是更多的連接和更多的延遲,但由於現代瀏覽器緩存,除了像這樣的解決方法外,沒有什麼可以完成的。

- 亞當

+0

我沒有得到消息「您已經退出,請關閉出於安全原因,此瀏覽器窗口」。 – Craig 2009-02-23 21:21:37

+0

那麼你有沒有在編程了。在需要安全的許多應用軟件,如貝寶,或Outlook Web Access,你會得到或基本類似的消息。你可以看看他們在做什麼,以防止後退按鈕的工作。這只是HTTP。 – 2009-02-23 21:24:52

0

雖然緩存並不能完全保證,這對我的作品大部分

//Used for disabling page caching 
    HttpContext.Current.Response.Cache.SetExpires(
     DateTime.UtcNow.AddDays(-1)); 
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false); 
    HttpContext.Current.Response.Cache.SetRevalidation(
     HttpCacheRevalidation.AllCaches); 
    HttpContext.Current.Response.Cache.SetCacheability(
     HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 

運行此任一頁面的的OnInit()方法(可能通過使用一個基類)在您不希望用戶能夠緩存的任何頁面上。

不過要小心,某些網頁可能需要您允許緩存如SSL網頁上的等

進行文件下載,我發現這個代碼的地方,如果我找到的鏈接,我會更新帖子。