2013-01-10 5 views
0

내 웹 사이트에서 사용자 로그인 세션을 만들고 있습니다. 세션을 초기화하고 멤버를 잘 사용할 수는 있지만 자체 세션 클래스 내에 자체를 저장할 메소드가 필요합니다. 입력 매개 변수로 HttpSessionState을 제공하고 Session["sessionName"]=this;과 같은 객체에 저장해야합니다.세션 만들기 및 저장

또한 세션을 검색하려면 아직 만들어지지 않을 것이므로 정적이어야합니다. 그런 다음 HttpSessionState 중 채워진 속성 (username 및 companyID)을 사용하여 세션 클래스의 새 인스턴스를 반환해야합니다.

내 세션 수업에서는 어떻게 할 수 있습니까? 위에서 설명한 내용은 내 문제에 대한 특정 솔루션을 제공하는 연구에서 나온 것이지만 세션을 처음 사용하기 때문에 이해가되지 않습니다. 감사합니다. . 코드 조각 내 세션 클래스의

:

public class MySession : System.Web.UI.Page 
    { 
     private MySession() 
     { 
      Username = Business.User.labelUsername; 
      CompanyId = Business.User.labelCompanyId; 
     } 

     public static MySession Current 
     { 
      get 
      { 
       try 
       { 
        MySession session = (MySession)HttpContext.Current.Session["sessionName"]; 

        if (session == null) 
        { 
         session = new MySession(); 
         HttpContext.Current.Session["sessionName"]=session; 
        } 
        return session; 
       } 
       catch (NullReferenceException e) 
       { 
        Debug.WriteLine("NullReferenceException:"); 
        Debug.WriteLine(e); 
       } 
       return null; 
      } 
     } 

     public string Username 
     { 
      get; set; 
     } 

     public string CompanyId 
     { 
      get; set; 
     } 
    } 
+2

나는 당신이 겪고있는 문제를 이해하지 못한다. 당신이 성취하고자하는 것을 정교 할 수 있는가? – Matthew

+0

OP가 원하는 것이 꽤 분명해 보입니다. 그는 세션에 자신의 물건을 보관하고 필요시 다시 가져와야합니다. – NotMe

답변

3
당신은 직렬화 "세션 정보"개체를 사용하여 시도 할 수

:

SessionInfo.Current.Name = "Something Here"; 
SessionInfo.Current.Foo = 100; 
:

[Serializable] 
public class SessionInfo 
{ 
    // Stuff to store in session 
    public string Name { get; set; } 
    public int Foo { get; set; } 

    private SessionInfo() 
    { 
     // Constructor, set any defaults here 
     Name = "" 
     Foo = 10; 
    } 

    public static SessionInfo Current 
    { 
     get 
     { 
      // Try get session info from session 
      var info = HttpContext.Current.Session["SessionInfo"] as SessionInfo; 

      // Not found in session, so create and store new session info 
      if (info == null) 
      { 
       info = new SessionInfo(); 
       HttpContext.Current.Session["SessionInfo"] = info; 
      } 

      return info; 
     } 
    } 
} 

당신은 다음과 같은 응용 프로그램 내에서이에서 사용할 수 있습니다

serialization/deserialization은 모두 SessionInfo 개체 내에서 수행되며 안전한 데이터 형식의 이점을 얻습니다.

+0

+1 : 좋은 방법입니다. – NotMe

1

당신이 직렬화 및 역 직렬화라고에 대해 요구하고있다.

직렬화는 개체를 가져 와서 저장할 수있는 문자열과 같은 형식으로 변환합니다. 직렬화 해제는 그 동작의 반대입니다.

"빠른"방법은 [Serializable] 속성을 클래스에 추가하는 것입니다. 그러나 그 클래스의 세부 사항을 알지 못하면 사실 약간의 작업없이 쉽게 직렬화 할 수 있는지 여부를 말하기 어렵습니다. 여기

은 연습입니다 : http://msdn.microsoft.com/en-us/library/vstudio/et91as27.aspx

+0

OP를 풀 클래스로 업데이트했습니다. – Nibirue