1. ホーム
  2. asp.net

[解決済み] FormsAuthentication.SignOut()がユーザーをログアウトしない

2022-05-10 08:44:44

質問

少し長い間、これに頭を打ち付けていました。FormsAuthentication.SignOutを使用してログアウトした後、ユーザーがサイトのページを参照するのを防ぐにはどうすればよいですか?私は、これがそれを行うことを期待します。

FormsAuthentication.SignOut();
Session.Abandon();
FormsAuthentication.RedirectToLoginPage();

でもダメなんです。URLを直接入力しても、そのページを閲覧することはできるんです。しばらくロールユアオウンセキュリティを使っていなかったので、なぜこれが機能しないのか忘れてしまいました。

どのように解決するのですか?

を呼び出すとCookieがクリアされないので、ユーザーはまだウェブサイトを閲覧することができます。 FormsAuthentication.SignOut() を呼び出したときにクッキーがクリアされず、新しいリクエストのたびに認証されるためです。MSのドキュメントでは、クッキーはクリアされると書いてありますが、クリアされません、バグですか? と全く同じです。 Session.Abandon() クッキーはそのままです。

コードをこのように変更する必要があります。

FormsAuthentication.SignOut();
Session.Abandon();

// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);

// clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
SessionStateSection sessionStateSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
HttpCookie cookie2 = new HttpCookie(sessionStateSection.CookieName, "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);

FormsAuthentication.RedirectToLoginPage();

HttpCookie が入っています。 System.Web の名前空間を使用します。 MSDNリファレンス .