3

ASP.NET Web アプリでユーザーの明示的なログアウト ボタンが必要です。基本認証 (SSL) で IIS6 を使用しています。別の Web ページにリダイレクトできますが、ブラウザーはセッションを維持します。私はグーグルで検索し、アクティブなxコントロールがIISと通信してセッションを強制終了できるようにする方法を見つけました。私はフォーム認証を許可しない制限された環境にいて、アクティブな x コントロールも禁止されていません。他の誰かがこの要件を持っていて、どのように処理しましたか?

さて、それは私が恐れていたものです。ネットで同様の回答を見たことがありますが、誰かがそれを行う方法を持っていることを望んでいました. お時間をいただきありがとうございます。history.back() のような戻るボタンを防ぐために JavaScript を使用できると思います。

4

4 に答える 4

4

私は数日間これに苦労していました。

IE固有の' document.execCommand('ClearAuthenticationCache');'を使用することは、すべての人に適したオプションではありません。1)すべての資格情報をフラッシュします。つまり、ユーザーは、たとえば、現在認証されているGmailやその他のWebサイトからもログアウトされます。2)IEのみです;)

Session.Abandon()を使用してから、Default.aspxにリダイレクトしてみました。これだけでは不十分です。行われたリクエストが許可されていないことをブラウザに明示的に伝える必要があります。これは、次のようなものを使用して行うことができます。

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

これにより、次のようになります。ユーザーがログアウトボタンをクリックする==>基本的なログインウィンドウが表示されます。ただし、Escキーを押して(ログインダイアログが消えて)更新を押すと、ブラウザは自動的に資格情報を再度送信し、ユーザーはログアウトしたと思うかもしれませんが、ログインします。

これを解決する秘訣は、常に一意の「レルム」を吐き出すことです。その場合、上記の場合、ブラウザは資格情報を再送信しません。私は現在の日時を吐き出すことにしました。

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

あなたがする必要があるもう一つのことは、ページをキャッシュしないようにブラウザに指示することです:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

これらすべてが整っていれば、IEでは(私にとっては)機能しますが、これまで、ユーザーが最初にエスケープ(基本的なログインダイアログを非表示)を押してから更新(F5)したときにFirefoxがユーザーにログインするのを防ぐことはできませんでした)またはブラウザの戻るボタン。

于 2010-03-24T09:42:06.550 に答える
2

このSession.Abandonメソッドは、Session オブジェクトに格納されているすべてのオブジェクトを破棄し、それらのリソースを解放します。Abandon メソッドを明示的に呼び出さない場合、サーバーはセッションがタイムアウトしたときにこれらのオブジェクトを破棄します。

于 2009-03-04T21:29:25.193 に答える
0

ボタンのクリックに応じて Session.Abandon を呼び出してみましたか?

編集

これは古典的な戻るボタンの問題のようです。

戻るボタンについてできることはほとんどありません。ユーザーが現在のページを新しいウィンドウで開いて logOut ボタンをクリックしたところを想像してみてください。そのページはログアウトしているように見えますが、他のウィンドウのコンテンツにはすぐには影響しません。

そのウィンドウ内のどこかに移動しようとしたときにのみ、セッションが終了したことが明らかになります。

多くのブラウザーでは、戻るボタンを同様の (同一ではありませんが) 方法で実装しています。前のページに戻ることは、必ずしも HTML/HTTP の観点からのナビゲーションではありません。

于 2009-03-04T21:27:48.287 に答える
0

これは、IE6 以降で機能するこの問題の解決策です。

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

http://msdn.microsoft.com/en-us/library/bb250510%28VS.85%29.aspxからこれを見つけました

Web チーム 略してあなたの資格情報をお願いします

Q: Jerry B. は次のように書いています。ユーザーが Web 上の特定のモジュールにアクセスする時間。」

A: これは、Internet Explorer チームに頻繁に要求される機能であり、良い人たちが Internet Explorer 6.0 SP1 でそれを行う方法を提供してくれました。次のように、コマンド パラメーターとして ClearAuthenticationCache を渡し、ドキュメントで execCommand メソッドを呼び出すだけです。

document.execCommand("ClearAuthenticationCache");

このコマンドは、認証が必要なリソースをユーザーが要求した場合に、認証のプロンプトが再度表示されるように、キャッシュ内のすべての資格情報をフラッシュします。

これをログアウトリンクボタンに配置すると、IE6 sp1 以降で動作します。

OnClientClick="document.execCommand('ClearAuthenticationCache');"
于 2010-02-02T18:24:26.653 に答える