ここにアイデアがあります。単純なユーザー情報であるセッション変数を取得および設定するSessionCacheクラスがあります。ユーザーが正常にログインするとセッションに値を設定したいこのクラスを使用してアプリケーション全体でセッション値を取得します。しかし、どういうわけか、SessionCacheクラスの値をセッション変数に設定できません。mvcのプロパティを使用してセッション値を割り当てます
のでpublic class SessionCache
{
public static string SessionID
{
get
{
return HttpContext.Current.Session.SessionID;
}
}
public static CurrentUserVM CurrentUser
{
get
{
return (CurrentUserVM)HttpContext.Current.Session["CurrentUser"];
}
set
{
HttpContext.Current.Session["CurrentUser"] = CurrentUser;
}
}
}
、Imは以下のようにログインアクションで上記のクラスを使用して値を設定しようとしている:
CurrentUserVM currentUser = new CurrentUserVM();
currentUser.User = db.userClass.FirstOrDefault(m => m.EmailID.Equals(objLogin.EmailID));
currentUser.isAuthenticated = true;
SessionCache.CurrentUser = currentUser;
SessionCache.CurrentUser.isAuthenticated = currentUser.isAuthenticated;
それでもSessionCache.CurrentUserはnull.Isそこに私のコードに何か残っていますか?
にこの
は 'HttpContext.Current.Session [ "CurrentUserには"]の値を=試してみてください;' –
これは、少なくともデータのために、しかし、非常に悪い考えですあなたは保管しています。ユーザーが認証されているかどうかは、セッションに格納しないでください。それはいつでも 'User.Identity.IsAuthenticated'を介して取得することができます。なぜなら、本当に理由はありません。ユーザーの電子メールアドレスのような情報は、常にデータベースから来るはずです。 Entity Frameworkは独自のクエリキャッシュを使用しているため、ユーザーレコードの取得にはほとんど費用がかかりません。セッションで常に更新する必要があります。 –
あなたが言ったことはまったく同意します。しかし、これは多くのデータを扱っておらず、ログインしたウェブサイトの異なる部分にユーザーをリダイレクトしているだけです。私はここのユーザーデータを使用していません。 @CashPratt – Mash