ASP.Netアプリケーションを再起動すると、ログに記録されたユーザーの資格情報が記憶され、自動的にログインしていることがわかる場合があります。
ログイン時に設定されたユーザーのセッション変数が実行されない限り、この動作は望ましくありません。では、アプリケーションの開始時にすべてのセッションを「忘れる」にはどうすればよいでしょうか。
イベントSession.Abandon()
では使えないようです。Application_Start
ASP.Netアプリケーションを再起動すると、ログに記録されたユーザーの資格情報が記憶され、自動的にログインしていることがわかる場合があります。
ログイン時に設定されたユーザーのセッション変数が実行されない限り、この動作は望ましくありません。では、アプリケーションの開始時にすべてのセッションを「忘れる」にはどうすればよいでしょうか。
イベントSession.Abandon()
では使えないようです。Application_Start
新しいセッションを開始するとき、つまりGlobal.asaxに追加するときにこのコードを使用します
#region remove all cookies
string[] myCookies = Request.Cookies.AllKeys;
foreach (string cookie in myCookies)
{
Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
}
#endregion
再起動後 セッションは存在しますか? それはどのように可能ですか?おそらく、セッション状態サーバーまたは SQL サーバーを使用しています。Application_Start イベントで Session.Abandon() を使用することはできません。これは、アプリケーションの開始時にセッションが存在しないためです。Application_End イベントで Session.Clear() または Session.Abandon() メソッドを呼び出して、アプリケーションの再起動時にすべてのセッションをクリアする必要があります。
フォーム認証を使用していると仮定すると、予想される動作です。アプリケーションが再起動されても、ユーザーは有効な FormsAuthentication Cookie を保持しています。
本当にログアウトしたい場合は、 を呼び出すだけですFormsAuthentication.SignOut
。
しかし、これを行う必要があるかどうか疑問に思います-なぜユーザーに資格情報の再入力を強制するのですか? セッションに保存された状態を失った場合、ホームページなどにリダイレクトする必要があるかもしれませんが、ユーザーを再度ログインさせる必要はありません。
次のように Cookie をクリアする必要があります。
foreach (string key in Request.Cookies.AllKeys)
{
HttpCookie cookie = new HttpCookie(key);
cookie.Expires = DateTime.UtcNow.AddDays(-7);
Response.Cookies.Add(cookie);
}
EDTI : これを行うと、すべての Cookie が期限切れになり、ブラウザーはすべての Cookie を削除しようとします。これにより、ユーザーのログイン状態が記憶されなくなります。
お役に立てれば。