웹은 비연결적 지향입니다. 무슨말이냐면, 웹페이지 클래스에 대한 새로운 인스턴스는 서버에서 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
}