2009-02-23 16 views
5

フォーム認証を使用するASP.NETアプリケーションがあります。ユーザーがページの[サインアウト]ボタンをクリックすると、次のコードが実行されます。ログアウト後の矢印

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

ただし、ユーザーは、再度ログインする必要なく、戻る矢印を押して前のページを見ることができます。私はそれが前のページがキャッシュされていることと関係があると確信しています。戻って再びログインするように求められたらどうすればいいですか?

+0

する方法の1つは、すべてのページにNo-Cacheコードを書くことですが、コンテンツを有効期限切れにする良い方法も探しています。 +1 – Ramesh

答えて

5
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

いいです。私はマスターページのPage_Loadにこれを置くと動作します。 :-) – Craig

1

これで、「ログアウトされました。セキュリティ上の理由から、このブラウザのウィンドウを閉じてください」というメッセージが表示されます。

回避策はありません。

最後の最後の回避策は、ajaxを使用して機密情報を取り除くことです。これはバックケースで再度実行され、情報はキャッシュされません。より多くの接続とより長い待ち時間がありますが、現代のブラウザキャッシングのために、これらの回避策を除いて実行できることはあまりありません。

任意のページののOnInit()メソッドで-Adam

+0

セキュリティ上の理由から、「あなたはログアウトされました。このブラウザのウィンドウを閉じてください」というメッセージは表示されません。 – Craig

+0

あなたはそれをプログラムしていません。paypalやOutlookのWebアクセスなどのセキュリティが必要な多くのソフトウェアアプリケーションでは、そのメッセージや実質的に似たメッセージが表示されます。戻るボタンが機能しないようにするために、何をしているのかを見ることができます。それは単なるHTTPです。 –

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(); 

を実行し、この(多分基本クラスを使用することにより、 )あなたがユーザーがキャッシュできるようにしたくないページでは、

はしかし注意してください、いくつかのページを使用すると、私はリンクを見つけた場合、私はポストを更新します、どこかにこのコードを見つけたなど

SSLページにファイルのダウンロードを行っているとして、キャッシングを可能にするために必要な場合があります。