2010-04-14 5 views
6

이것이 최선의 방법인지 확실하지 않지만 현재 사용자의 모든 요청 중에 사용자 개체를 활성 상태로 유지하려고합니다. 몇 가지 자료를 읽음으로써 나는 이것을 소유하고있는 당신 자신의 IPrinciple을 만들어야한다는 것을 배웠습니다. 하지만 모든 인증 요청마다 데이터베이스를 실행하고 싶지는 않습니다. 이 처리 방법에 대한 권장 사항은 무엇입니까? db 요청 캐싱이 좋은 생각입니까?asp.net mvc에서 현재 사용자를 설정하십시오

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
    { 
     HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

      User user; 
      using (HgDataContext hg = new HgDataContext()) 
      { 
       if (Session["user"] != null) 
       { 
        user = (from u in hg.Users where u.EmailAddress == authTicket.Name select u).Single(); 
       } else 
       { 
        user = Session["user"] as User; 
       } 
      } 
      var principal = new HgPrincipal(user); 
      Context.User = principal; 
     } 
    } 
+0

질문은 나에게 불확실한 것처럼 보입니다. 정확히 어떤 물건을 살리고 싶습니까? 어쨌든 코드 조각은 어떤 객체도 살아 있도록 관리하지 않으므로 거기에 실수가있는 것 같습니다. 그러나 당신이 달성하고자하는 것이 정확히 무엇인지 모른 채, 나는 다른 것을 말할 수 없습니다. 정교하게 제발 주시겠습니까? –

+0

내 사용자 객체를 계속 유지하려고합니다. – TomHastjarjanto

답변

2

사용자를 캐시하는 다음 코드를 사용하고 있습니다. 업데이트 후에 캐시를 삭제해야합니다.

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
     { 
      HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
      if (authCookie != null) 
      { 
       FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

       User user; 
       Cache cache = HttpContext.Current.Cache; 
       using (HgDataContext hg = new HgDataContext()) 
       { 
        user = cache[authTicket.Name] as User; 
        if (user == null) 
        { 
         user = (from u in hg.Users where u.EmailAddress == authTicket.Name select u).Single(); 
         cache[authTicket.Name] = user; 
        } 
       } 
       var principal = new HgPrincipal(user); 
       Context.User = principal; 
      } 
     } 
0

자신의 IPrincipal 구현을 만드는 것이 최선의 방법입니다. 업데이트 된 경우 새로 고치는 한 사용자의 데이터를 캐시하는 것은 문제가 아닙니다. 보통 사용자 자신 만이 자신의 개인 데이터를 변경할 수 있으므로 그렇게하기 어렵지 않습니다. this blog post에서 현재 사용자를 쉽게 변경할 수 있습니다.

3

아마도이 작업을 수행하는 적절한 방법 일 수 있으며, 사실 내가 사용하고자하는 몇 가지 세션 중 하나입니다.

관련 문제