2013-04-05 1 views
1

예를 들어 사용자가 로그인 한 경우 userID 및/또는 사용자의 역할/그룹을 저장하는 가장 좋은 방법은 무엇입니까? 분명한 접근 방식은 쿠키와 세션입니까? 다른 옵션은 무엇입니까?asp.net mvc (면도날 3) 응용 프로그램에서 값을 저장하는 방법은 무엇입니까?

+0

사용자 당 값을 저장하려면 해당 옵션이 가장 적합하다고 생각합니다. – pollirrata

+0

완전하게 따르지 않습니다. 예를 들어 주시겠습니까? – Chaka

+0

답변에 자세한 내용을 추가했습니다 ... – pollirrata

답변

0

적어도 양식 인증을 사용하면 사용자 ID와 역할을 Formst Auth Ticket에 넣을 수 있습니다.

Here'a 내가했던 방법의 예 :

public static HttpCookie CreateCookie(IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false) 
    { 
     var user = new AuthenticationTicketData() { Groups = @group, UserId = userId }; 
     var ft = new FormsAuthenticationTicket(2, name, DateTime.Now, DateTime.Now.Add(FormsAuthentication.Timeout), 
               isPersistent, user.Pack()); 
     var ck = new HttpCookie(FormsAuthentication.FormsCookieName) 
        { 
         Value = FormsAuthentication.Encrypt(ft), 
         Path = FormsAuthentication.FormsCookiePath, 
         Domain = FormsAuthentication.CookieDomain 
        }; 
     if (isPersistent) 
     { 
      ck.Expires = DateTime.Now.Add(FormsAuthentication.Timeout); 
     } 
     return ck; 
    } 


public static string Pack(this AuthenticationTicketData data) 
    { 
     if (data == null) throw new ArgumentNullException("data"); 
     return String.Format("{0};{1}",PackUserId(data.UserId),string.Join(",",data.Groups)); 
    } 

    static string PackUserId(IUserIdValue uid) 
    { 
     if (uid == null) throw new ArgumentNullException("uid"); 
     var tpn = uid.GetType().GetFullTypeName(); 
     return String.Format("{0}|{1}",tpn,uid.ToString()); 
    } 

public static HttpCookie SetAuthCookie(this HttpResponse response,IUserIdValue userId, string name, IEnumerable<int> group, bool isPersistent = false) 
    { 
     var ck = CreateCookie(userId, name, group, isPersistent); 
     response.AppendCookie(ck); 
     return ck; 
    } 

또 다른 대안이 테이블 등 사용자 세션 데이터베이스 (세션에 관계 없음), 뭔가를 유지하는 것입니다 (GUID, 사용자 이름, 사용자 ID , 역할, 만료). 하지만이 방법은 사용자가 로그인/로그 아웃 할 때 또는 양식 인증이 아닌 자신의 인증을 사용하는 경우를 추적하려는 경우에 더 적합합니다.

+0

예제와 설명을 제공해 주셔서 감사합니다! – Chaka

0

사용자 당 값을 저장하려면 I 세션이 가장 좋습니다. 세션은 사용자/브라우저별로 생성됩니다. 각 사용자는 자신의 세션 개체를 가지므로 세션이 끝날 때까지 사용자 역할 정보를 응용 프로그램 전체에 유지할 수 있습니다.

사용자 보안 정보를 쿠키에 저장하지 않는 것이 좋습니다. 응용 프로그램에 큰 보안 허점이 생길 수 있기 때문입니다.

관련 문제