재우니의 블로그

Session in ASP.Net webform - 강좌1

 

목차

 

 

 

 

 

소개

 

이번 내용은 세션에 대한 모든 이야기를 해볼까 합니다. 그리고 생산 환경에서 세션 behavor 에 대해 자세히 설명할 것입니다. 

 

 

세션은 뭔가요?

 

웹은 비연결적 지향입니다. 무슨말이냐면, 웹페이지 클래스에 대한 새로운 인스턴스는 서버에서 post 된 각각의 페이지마다 다시 생성한다는 것을 의미합니다. 여러분들이 아시는 HTTP 는 비연결지향 프로포콜입니다. 이는 페이지 상에 클라이언트 정보를 가질 수 없습니다. 만약에 사용자가 약간의 정보를 저장했다면, 다음 페이지로 클릭을 할때 데이터는 사라지고, 사용자는 그 정보를 추출해 올 수 없습니다. 그래서 우리는 정보를 저장을 할 필요가 있을 수도 있습니다. 세션은 서버의 메모리상에 데이터를 저장할 수 있는 기능을 제공해 줍니다. 이는 custom 객체와 함께 저장할 어떠한 객체 형식도 저장합니다.

모든 사용자들의 세션 데이터를 위해서 분리적으로 저장합니다. 이 말은 사용자별로 세션 정보를 저장한다는 의미입니다.

이 부분에 대해서 아래와 같은 이미지를 보시기 바랍니다.

 

 

 

 

 

 

 

 

모든 클라이언트 상태 관리를 위한 다른 컬렉션처럼 저장한 세션 데이타는 asp.net 의 기능중 하나 입니다. 왜냐면 이를 보안, 사용자의 투명성 그리고 이를 가지고 어떤 종류의 객체를 저장할  수 있습니다. 좀 더 깊에 이야기를 하자면, 세션은 상당한 트래픽에 대한 성능 이슈가 발생할 수 있습니다. 왜나면 이는 서버 메모리에 저장하기 때문입니다. 우리는 웹 어플리케이션에서 세션을 사용하는 부분에 있어서 장단점을 살펴보고자 합니다.

 

 

Session 에 대한 장단점은 무엇일까?

 

 

세션 사용에 대한 기본적인 장단점이 아래와 같이 있습니다. 현재의 시점에서 각각의 세션 type 에 대해 상세히 기술하였습니다.

 

 

장점 :

  • 전반적인 어플리케이션에서 사용자의 상태와 데이터를 유지하는데 도움을 줍니다.
  • 쉽게 구현할 수 있습니다.
  • 분리적으로 모든 사용자 데이터를 저장할 수 있습니다.
  • 세션은 보안적이며, 사용자의 투명성을 제공합니다.

 

 

단점  :

  • 많은 사용자로 인해 성능에 대한 오버해드 발생가능합니다.
  • 세션 데이타를 직렬화 및 역직렬화에 관련한 오버해드가 발생됩니다.

 

 

이것들 이외에 세션 기반인 세션의 장단점이 많이 있습니다. 이에 대한 모든 전반적인 부분을 살펴보죠.

 

 

Session 으로 부터 값을 저장하고 가져오는 방법

 

 

세션에서 값을 추출하거나 저장하는 것은 ViewState 를 가지고 매우 간단히 작업을 할 수 있습니다. System.Web.SessionState.HttpSessionState 클래스를 가지고 Session 상태를 가져올 수 있습니다.

왜냐면 이 제공자는 asp.net 페이지의 session 객체에서 built 를 제공하기 때문입니다.

 

 

세션에서 값을 저장하기 위한 사용된 코드입니다.

 
      //Storing UserName in Session
       Session["UserName"] = txtUser.Text;

 

 

세션으로부터 값을 가져올 수 있는 방법을 보여줍니다.

 
//Check weather session variable null or not
        if (Session["UserName"] != null)
        {
            //Retrieving UserName from Session
            lblWelcome.Text = "Welcome : " + Session["UserName"];
        }
        else
        {
         //Do Something else
        }

 

 

세션에서 또 다른 객체들 또한 저장할 수 있습니다. 세션에서 DataSet 으로 어떻게 저장하는지 예제를 살펴볼까요.

 

 
        //Storing dataset on Session
        Session["DataSet"] = _objDataSet;  

 

그리고 Session 에서 DataSet 을 아래와 같은 방법으로 추출해 올 수 있습니다. 

 
//Check weather session variable null or not
        if (Session["DataSet"] != null)
        {
            //Retrieving UserName from Session
            DataSet _MyDs = (DataSet)Session["DataSet"];
        }
        else
        {
            //Do Something else
        }

 

 

Session ID

 

 

ASP.NET 은 각각의 세션 트랙에서 120 비트 식별자를 사용합니다. 이는 보안상 매우 충분하며, 이를 해독할 수도 없습니다.

클라이언트가 서버와 통신을 할때 오직 SESSION 의 ID 는 이들 사이에 전송이 됩니다. 클라이언트가 데이터를 요청하게 되면, ASP.NET 은 session ID 를 찾게 되고, 관련된 데이터를 가져오게 됩니다. 이러한 것들은 아래와 같은 단계별로 진행이 됩니다.

 

 

  • 클라이언트는 웹사이트에 방문하며, 몇몇의 정보는 세션에 저장합니다.
  • 서버는 해당 클라이언트에 대해 유일한 session ID 를 생성하며, Session State Provider 로 저장합니다.
  • 다시 클라이언트는 서버로 부터 유일한 session ID 로 약간의 정보를 요청합니다.
  • 서버는 Session Providers 를 통해 찾으며, state 서버 그리고 객체 형변환 형식으로 데이터를 직렬화하여 추출해 옵니다.

 

 

이에 대해 아래와 같은 이미지 화면처럼 요약을 할 수 있습니다.

 

Fig : 클라이언트의 통신, 웹서버 그리고 State 제공자

 

 

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌1 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌2 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌3 바로가기

🎈🎈📢📢📢 Session in ASP.Net webform - 강좌4 바로가기