2009-06-17 5 views
3

우리 회사의 여러 다른 장소에서 사용하는 사용자 지정 비즈니스 개체에 로그인 세부 정보를 전달하기 위해 사용자 지정 MembershipProvider를 구현하고 있습니다. 그러나 일단 우리가 인증을 받았다면 세션에이 초기화 된 비즈니스 객체를 저장하여 나중에 다른 페이지에서 사용할 수 있습니다. 예를 들어 보겠습니다.사용자 지정 MembershipProvider의 사용자 세션에 뭔가를 추가 할 수 있습니까?

public override bool ValidateUser(string username,string password) 
{ 
    try 
    { 
     // I want to keep this "object" in the Session to be used later on 
     CustomBusinessObject object = new CustomBusinessObject(username, password); 

     return true; 
    } 
    catch (CustomBusinessAuthenticationException) 
    { 
     return false; 
    } 
} 

나를위한 방법이 있습니까? 이 사용자 지정 MembershipProvider 구현을 통해 Session 개체에 액세스 할 수있는 방법을 즉시 보지 못했습니다.

답변

3

System.Web.HttpContext.Current를 호출하여 세션에 액세스 할 수 있습니다. HttpContext.Current가 null인지 확인하고 null 인 경우 null을 반환하는 사용자 지정 멤버 자격 공급자에 대한 사용자 지정 속성을 만듭니다. 그렇지 않으면 해당 세션 값에 적절하게 액세스합니다.

public object CustomObject 
{ 
    get 
    { 
     if(System.Web.HttpContext.Current == null) 
     { 
      return null; 
     } 
     return System.Web.HttpContext.Current.Session["CustomObject"]; 
    } 
    set 
    { 
     if(System.Web.HttpContext.Current != null) 
     { 
      System.Web.HttpContext.Current.Session["CustomObject"] = value; 
     } 
    } 
} 
0

System.Web.HttpContext.Current.Session에 액세스 할 수 있어야합니다.

System.Web.HttpContext은 공급자가 ASP.Net 파이프 라인 외부에서 사용되는 경우 null이되며 공급자 내부에서 사용하면 공급자를 ASP.Net에 단단히 연결합니다.

+0

타이트 커플 링에 대해 언급 하시겠습니까? 만약 그렇다면 당신은 정교 할 수 있습니까? –

+0

타이트 커플 링은 항상 나쁜 생각입니다.) 제공자 모델은 이식성이 있어야하며 ASP.Net 개념 만이 아닙니다. 그러나 이것은 귀하의 앱에 문제가되지 않을 수도 있습니다. – womp

+0

글쎄, 나는 단단한 결합을 피하는 것이 핵심 개념이라는 것을 IoC를 추가 할 계획이다. 그러나이 객체는이 웹 사이트의 핵심 부분이므로 더 추상적으로 추출하는 방법을 살펴보아야 할 것입니다. 감사. –

관련 문제