2009-02-26 16 views
10

私たちの問題はログアウト時にセッションをクリアできることです。asp.netのユーザーログアウト時にブラウザの戻るボタンを無効にする方法c#

しかし、ユーザーが戻るボタンをクリックすると、前のすべての画面を通過できます。

しかし、利点は、以前のサーフページのいずれかを1回クリックするだけで、ユーザーがログインページに戻ることができたことです。しかし、私たちの要件は、ユーザーが以前のサーフページを通過することを許可してはならないということです。

+0

Coding Solutions

で見つかったソリューションは、このソリューションをチェックしています。うまく動作します http://geekswithblogs.net/Frez/archive/2010/05/18/back-button-issue-after-logout-in-asp.net.aspx – Syed

+0

もhttp://stackoverflow.com/aを参照してください/ 28458499/2089963 – Syed

答えて

1

Outlook Web Accessスタイルを使用して、現在のウィンドウ/タブを閉じることができます。

また、「ログアウト」ページがポストバックであることを確認することもできます。そうすれば、ほとんどのブラウザの[戻る]ボタンを押してポストバックを再試行し、ログインしなくなったことを検出してログインページに戻すことができます。

編集:他の人がResponse.Redirectについて述べました。実際には、「ログアウト」リンクをリダイレクトするページに移動し、常に2番目の「リンク先ページ」にリダイレクトすることができます。ユーザーが「戻る」をクリックすると、リダイレクトに再度着陸し、開始した場所に戻します。

ブラウザの履歴を防止する方法はないので、いくつかの方法を併用することが重要です。また、アプリケーションのセキュリティを確保するために、ユーザーが「逆戻りしない」ことを計画しないでください。

12

キャッシュを有効にするには、キャッシュを期限切れにする必要があります。私はコードサンプルを探しています。

EDIT
これは既にここで解決済みです。

Page.Response.Cache.SetCacheability(HttpCacheability.NoCache) 

Here...

+0

+1これは私の答えにこれを追加すると考えられましたが、 – Brandon

2

ASP.NETページの場合、ページがユーザーのキャッシュに保存される方法を制御するためにResponse.CacheControlを使用することができます。他のWeb開発言語は、同様のものを利用します。

7

戻るボタンを無効にすることはできません。バック履歴をクリアすることができると私は見てきた多くの "トリック"がありますが、これらは信頼性が低く、ブラウザからブラウザ、またはブラウザのバージョンからブラウザのバージョンには対応していません。

他の人は言ったように、データを再送信しようとするとセッションがもはや有効ではないことをサーバー側の検証と共にキャッシュを無効にします。また、Response.Redirectはポストバックよりもうまく機能します。これはポストバックではなくgetを引き起こすためです。

+0

すべての回答のうち、これは質問に直接答える最も完全で正しいものです。残念ながら、私は1つの投票しか持っていません。 ;-) – Cerebrus

10

書き込みページロードイベントでマスターページでこのコード

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1)); 
Response.Cache.SetNoStore(); 

と、このコードを書きますin ログインページの頭の部分

<script type="text/javascript"> 
window.history.forward(-1); 
</script> 
+0

モバイルサファリが動作していません –

0

この私がマスターページ

protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.ClearHeaders(); 
     Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
     Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
     Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
     Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
     Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
     Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
    } 

コントロールLoginStatus

protected void LoginStatusUser_LoggedOut(object sender, EventArgs e) 
    { 
     Session.Abandon(); 
     FormsAuthentication.SignOut(); 
    } 
関連する問題