フォーム認証によってユーザーを認証する MVC 3 プロジェクトがあります。
認証後に必要なときにユーザーのさまざまな情報にアクセスするために、単純なクラスを実装しました。
public class ComplexUserData
{
public static string complexAccountName;
public static string complexRole;
...
...
}
すべてのページ リクエストで、コントローラーはこのオブジェクトを参照し、必要に応じてプロパティにデータを入力します。
一方で:
ログイン プロセスは次のようになります。
- ログオン ページが要求されました
- LogOn View を返す前に、コントローラー
HttpContext.User.Identity.Name
は null でないかどうかをチェックします。 - null でない場合は、そのユーザー名を持つユーザーを見つけて、適切なランディング ページにリダイレクトします。
- それ以外の場合は、ログオン ページを返します
ログアウト プロセスは次のようになります。
FormsAuthentication.SignOut();
Session.Abandon();
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1); Response.Cookies.Add(cookie1);
HttpCookie cookie2 = new HttpCookie("ASP.NET_SessionId", "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);
ログオンにリダイレクト
私のマスターページではSessionData.complexAccountName
、トップバーで使用しています。ユーザーテストまではすべて問題ないようです。
ユーザー A は、ページをしばらくアイドル状態にしてからシステムからログアウトした後、サイトがメイン ページに戻り、トップ バーにユーザー B が表示されていると述べています。同時に、ユーザー B も同じことを行い、ユーザー A をトップバーに表示しました。
したがって、プロセスが示すように、ユーザーがログアウトしてログオンページにリダイレクトされると、コントローラーは をチェックし、HttpContext.User.Identity.Name
null である必要がありますが、そうではありません! 実際には別のユーザーの名前を保持しています!
私は何を間違っているのですか、なぜシステムが奇妙に動作するのですか?
よろしくお願いいたします。