2017-02-10 4 views
0

ここにアイデアがあります。単純なユーザー情報であるセッション変数を取得および設定する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そこに私のコードに何か残っていますか?

+1

にこの

HttpContext.Current.Session["CurrentUser"] = CurrentUser; 

は 'HttpContext.Current.Session [ "CurrentUserには"]の値を=試してみてください;' –

+1

これは、少なくともデータのために、しかし、非常に悪い考えですあなたは保管しています。ユーザーが認証されているかどうかは、セッションに格納しないでください。それはいつでも 'User.Identity.IsAuthenticated'を介して取得することができます。なぜなら、本当に理由はありません。ユーザーの電子メールアドレスのような情報は、常にデータベースから来るはずです。 Entity Frameworkは独自のクエリキャッシュを使用しているため、ユーザーレコードの取得にはほとんど費用がかかりません。セッションで常に更新する必要があります。 –

+0

あなたが言ったことはまったく同意します。しかし、これは多くのデータを扱っておらず、ログインしたウェブサイトの異なる部分にユーザーをリダイレクトしているだけです。私はここのユーザーデータを使用していません。 @CashPratt – Mash

答えて

1

私は問題が明らかだと思います。ただ、簡単な変更この

HttpContext.Current.Session["CurrentUser"] = value; 
+0

私は何を考えていたのでしょうか.sheesh。ありがとう – Mash

+0

@Mash、あなたを歓迎します。あなたの問題を解決したら、これを答えとしてマークすることを忘れないでください。ありがとう:) – jtabuloc

関連する問題