私は数日間これに苦労していました。
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がユーザーにログインするのを防ぐことはできませんでした)またはブラウザの戻るボタン。