Data Analysis for Investment & Control

[ASP.NET] 상태관리 - Cookie, Session 본문

Code

[ASP.NET] 상태관리 - Cookie, Session

아슈람 2018. 5. 15. 00:23
반응형


본 내용은 도서 <ASP.NET 4.5.1 웹 프로그래밍>의 내용을 참고하였습니다.



상태관리(State management)란 웹 페이지 요청과정에서 저장 유지되어야 할 상태 정보를 관리하는 프로세스이다. 상태 정보는 웹 페이지 요청 과정에서 생성되는 정보로서 웹 페이지가 정해진 로직대로 정상적으로 동작하는 데 필요한 모든 형태의 정보를 말한다. 예를들면, 다음과 같은 것들이 있다.


- 인증 정보

- 권한 정보

- 회원 정보


상태 관리 옵션은 상태 정보의 저장 위치에 따라 클라이언트 측 상태 관리 옵션과 서버 측 상태 관리 옵션으로 나뉜다.


클라이언트 측 상태 관리 옵션 다음과 같다.


- 숨겨진 필드, Hidden Field

- 뷰 상태, View State

- 컨트롤 상태, Control State

- 쿠키, Cookie

- 쿼리 문자열, Query String


서버 측 상태 관리 옵션은 다음과 같다.


- 응용프로그램 상태, Application State

- 세션 상태, Session State

- 프로필 속성, Profile Property

- 데이터베이스, Database


클라이언트 측 상태 관리 옵션은 상태 정보를 저장할 때 서버 리소스를 사용하지 않으므로 서버를 가볍게하여 부하를 줄이고 서버의 수행 속도를 빠르게 할 수 있지만 상태 정보를 클라이언트 측에 저장하기 때문에 보안에 취약하며 저장할 수 있는 정보의 양이 제한적이다.



쿠키, Cookie


쿠키는 상태 정보를 저장하는 임시 파일로 클라이언트 측 컴퓨터에 저장된다. 사용방법은 다음과 같다.


Reponse.Cookies["키"].Value = 값;

변수 = Request.Cookies["키"].Value;


또한 HttpCookie 클래스를 사용하면 좀 더 구조적으로 정보를 저장하고 사용할 수 있다.


[저장]

HttpCookie cookie = new HttpCookie("키");

cookie.Values.Add("키1", 값1);

cookie.Values.Add("키2", 값2);

Response.Cookies.Add(cookie);


[참조]

HttpCookie cookie = Request.Cookies["키"];

변수1 = cookie.Values["키1"];

변수2 = cookie.Values["키2"];



세션, Session


네트워크에서 말하는 세션은 사용자 간 또는 컴퓨터 간의 통신을 위해 형성된 논리적 연결을 의미한다. 특히, 웹 환경에서는 웹 브라우저와 웹 서버 간의 논리적 연결이 바로 세션인데 기본적으로 한 웹 브라우저 당 하나의 세션이 생성된다고 이해를 하면 된다.


세션 상태 정보를 기본적으로 웹 서버 메모리에 저장된다. 그리고 세션 상태는 식별자라고 불리는 고유한 세션 ID를 생성한 후에 이 세션 ID를 서버(메모리)와 클라이언트(쿠키)에 각각 저장함으로써 각각의 세션을 식별한다.


예를 들면, 클라이언트에서 요청이 들어오면 서버는 클라이언트에서 전달된 세션 ID를 서버에 있는 것과 비교하여 해당 클라이언트가 어느 세션과 연결되어 있는지 식별한다. 그리고 웹 서버의 메모리에 저장되어 있는 세션 상태 정보는 웹 서버가 중지되거나 웹 응용 프로그램 프로세스가 다시 시작될 때 삭제되는데 그래서 ASP.NET에서는 다양한 방식으로 세션 상태를 유지할 수 있도록 아래와 같이 다양한 세션 상태 모드를 제공한다.


In-Process 모드 : 웹 서버의 메모리에 세션 상태 정보를 저장한다. 이 모드는 기본 모드로 아무런 설정을 하지 않으면 이 모드가 사용된다.


State Server 모드 : ASP.NET 상태 서비스라고 하는 별도의 프로세스에 세션 상태 정보를 저장한다. ASP.NET 상태 서비스 프로세스는 웹 응용 프로그램 프로세스와 별개로 동작하는 프로세스이므로 이 모드를 사용하면 웹 응용 프로그램 프로세스가 다시 시작되더라도 세션 상태 정보가 그대로 유지된다.


SQL Server 모드 : SQL Server 데이터베이스에 세션 상태 정보를 저장한다. 이 모드를 사용하면 웹 응용 프로그램 프로세스가 다시 시작되더라도 세션 상태 정보가 그대로 유지된다.


사용자 지정 모드 : 세션 상태 저장소 공급자를 따로 구현하여 세션 상태 정보를 저장한다. 


Off 모드 : 세션 상태를 비활성화한다.


위의 모드를 처리 속도와 안정성을 비교하면 다음과 같다.


처리 속도 : In-Process > State Server > SQL Server

안정성 : In-Process < State Server < SQL Server


세션 상태모드는 web.config 파일에서 <sessionState> 요소의 mode 특성을 통해 설정할 수 있다.


<system.web>

<sessionState mode="InProc"></sessionState>

</system.web>


<sessionState> 요소에 timeout 특성을 지정하여 세션 상태의 만료 시기를 설정할 수 있다. timeout 특성에는 분 단위의 정수 값을 지정할 수 있는데, 525,600분(1년)보다 큰 값을 지정할 수는 없으며, 만약 특성을 지정하지 않으면 기본값인 20(분)이 지정된다.


<system.web>

<sessionState timeout="20"></sessionState>

</system.web>


세션 상태에 정보를 저장하고 참조할 때는 Session 속성을 사용하면 된다.


[저장]

Session["키"] = 값;


[참조]

변수 = Session["키"];


Session 속성은 컬렉션 형식으로 구성되어 있으므로 위와 같이 키(Key)를 통해 해당 세션 상태에 접근하면 된다.




반응형
Comments