ServerVariables

웹 서버 변수의 값을 가져오기 위해서는 Request.ServerVariables["서버 변수명"] 구문을 사용한다.
 
예를 들어 전송 방식을 나타내는 REQUEST_METHOD 변수의 값을 가져오는 방법은 아래와 같다.
string strMethod = Request.ServerVariables["REQUEST_METHOD"];

쿠키

HTTP 요청과 응답은 단발성이기 때문에 서버와 클라이언트간에 어떤 정보를 지속적으로 유지시키려면 쿠키나 세션을 사용하여야 한다. 웹 어플리케이션에서는 Response 객체의 Cookies 컬렉션을 사용하여 쿠키를 남기고, Request 객체의 Cookies 컬렉션을 사용하여 쿠키 값을 가져올 수 있다.

"writer"라는 이름의 쿠키를 남기는 예제는 다음과 같다.
HttpCookie ckWriter = new HttpCookie("writer", strWriter);
Response.Cookies.Add(ckWriter);
 
"writer"라는 이름의 쿠키 값을 가져오는 예제는 다음과 같다.
string strWriter = "";
if (Request.Cookies["writer"] != null )
   strWriter = Request.Cookies["writer"].Value.ToString();
 
Domain 속성을 사용하여 쿠키가 적용되는 도메인을 설정할 수 있다.
HttpCookie ckWriter = new HttpCookie("writer", strWriter);
ckWriter.Domain = "dizzius.com"
;
Response.Cookies.Add(ckWriter);
 
Path 속성을 사용하면 쿠키가 적용되는 path를 설정할 수 있다. 이 속성이 지정되지 않으면 어플리케이션의 path가 사용된다.
HttpCookie ckWriter = new HttpCookie("writer", strWriter);
ckWriter.Path = "/"
;
Response.Cookies.Add(ckWriter);
 
쿠키가 만료되는 시점은 Expires 속성을 사용하여 설정할 수 있다. 이 속성을 설정하지 않을 경우 웹 브라우저가 종료할 때 쿠키가 삭제된다.

HttpCookie ckWriter = new HttpCookie("writer", strWriter);
ckWriter.Expires = DateTime.Now.Add(new TimeSpan(365, 0, 0, 0));

 // 365일 후에 만료 ¸¸

Response.Cookies.Add(ckWriter);

어플리케이션 변수

어플리케이션 변수는 특정 웹 서버 모듈에 대한 클라이언트들간에 어떤 정보를 유지하고자 할 때 사용하며, 쉽게 말해 특정 웹 서버 모듈이 사용하는 전역 변수이다. 어플리케이션 변수를 생성시킨 웹 서버 모듈이 아니면 어떤 서버 모듈에서도 그 어플리케이션 변수 값을 참조할 수도, 수정할 수도 없다. 어플리케이션 변수는 웹 서버 모듈이 작동하고 있는 동안 지속적으로 메모리에 저장되어 있기 때문에 용량이 큰 내용을 어플리케이션 변수로 저장해두고 있는 것은 좋은 방법이 아니다. 또한 다수의 클라이언트가 웹 서버 모듈에 접근하기 때문에 어플리케이션 변수 값을 변경할 때에는 Lock(), UnLock() 같은 메서드를 사용하여 동기화에 대한 처리를 해주어야 한다.
 
다음은 "counter"라는 이름의 어플리케이션 변수를 생성하고 값을 지정하는 예제이다.
Application["counter"] = 1;
 
다음은 "counter"라는 이름의 어플리케이션 변수가 존재하는지 체크하고 그 변수 값을 얻는 예제이다.
if (Application ["counter"] != null)
   int iCounter = (int)Application ["counter"];
 
아래는 어플리케이션 변수를 사용한 카운터 예제이다. 동기화를 위해 Lock()과 UnLock() 메서드를 사용하였다.
Application.Lock();
Application["counter"] = (int)Application["counter"] + 1
;
Application.UnLock();

세션 변수

세션은 서버와 클라이언트간에 어떤 정보를 지속적으로 유지시키기 위한 또다른 방법이다. 세션이 맺어지면 내부적으로 Session ID가 할당되고 웹 브라우저가 종료될 때까지 이 정보가 클라이언트와 서버간에 쿠키나 URL의 변형같은 방법을 통해 전달된다. 기존에는 프로세서 단위로 세션을 관리했었기 때문에 다수의 웹 서버간에는 세션 정보를 공유할 수 없었으나, .NET 프레임워크에서는 이러한 한계를 벗어날 수 있는 방법을 제시한다.
 
.NET 프레임워크에서는 기본적으로 IIS 프로세스의 메모리 캐시에서 세션 정보를 관리하지만, 별도의 세션 관리 서비스나 SQL Server 데이터베이스를 사용하여 세션을 관리하는 것이 가능하다. 클라이언트로부터 request가 들어오면 웹 서버는 세션 관리 서비스의 메모리 혹은 데이터베이스의 임시 테이블에 저장된 세션 정보에서 필요한 정보를 가져와서 적절한 처리를 한다. 이러한 방식을 사용하면 다음과 같은 이점이 있다.
  • worker 프로세스와는 별개의 장소(메모리 또는 데이터베이스)에 세션 정보가 존재하기 때문에 웹 서버 모듈이 작동을 멈추는 최악의 상황에서도 세션 정보는 유지되고 웹 서버 모듈이 정상화되면 재사용할 수 있다.
  • 웹 서버 모듈을 잘게 쪼개어서 다수의 웹 서버에 배치시킬 수 있으며 이것은 모듈의 가용성과 확장성을 높여준다.
다음은 "admin"이라는 이름의 세션 변수를 생성하고 변수 값을 지정하는 예제이다.
Session["admin"] = strPasswd;
 
다음은 "admin"이라는 이름의 세션 변수가 존재하는지 체크하고 그 변수 값을 얻는 예제이다.
if (Session["admin"] != null)
   strPasswd = Session["admin"].ToString();
 
ASP.NET에서는 디폴트로 세션을 사용하도록 되어 있는데, 세션의 유지를 위해서는 어느 정도의 서버 리소스가 필요하기 때문에 굳이 세션을 유지할 필요가 없다면 세션을 사용하지 않도록 지정해주는 것이 좋다.
.aspx 페이지에서 세션을 사용하지 않겠다고 지정할 때에는 EnableSessionState 속성을 "false"로 설정한다.
<%@ Page EnableSessionState="false" %>
 
세션을 사용하지만 변수 값을 참조만 하고 수정을 하지 않을 때에는 EnableSessionState 속성을 "ReadOnly"로 설정한다. EnableSessionState를 "true"로 지정할 때보다(디폴트 상태) 리소스를 적게 차지한다.
<%@ Page EnableSessionState="ReadOnly" %>
 
웹 어플리케이션 레벨에서 세션을 사용하지 않을 때에는 web.config 파일의 단락에서 mode 속성을 "off"로 설정한다.
<sessionState mode="off" />
 
세션 유지 방법은 web.config 파일의 <sessionState> 단락에서 지정하며, InProc, StateServer, SQLServer 이렇게 세 가지 모드를 사용할 수 있다. InProc 모드에서 그 속도가 가장 빠르며, 다수의 서버에서 세션 정보를 공유하고자 할 때 혹은 세션 정보가 유실되어서는 안될 때 StateServer나 SQLServer 모드를 사용한다.
 
아래는 웹 어플리케이션 프로젝트 생성시 디폴트로 설정되는 InProc 모드에 대한 섹션이다. 세션 정보는 웹 어플리케이션과 같은 메모리 공간에 저장된다.
<sessionState
   mode="InProc"
   cookieless="false"
   timeout="20"
/>
 
StateServer 모드를 사용하려면 mode 속성값을 "StateServer"로 설정하고 서버 연결 문자열을 지정해야 한다. 아래 예제는 TCP/IP를 사용하여 로컬 서버의 42424 포트로 연결하고 있다.
<sessionState
   mode="StateServer"
   stateConnectionString="tcpip=127.0.0.1:42424"
   cookieless="false"
   timeout="20"
/>
 
이 때 State Server에서는 세션 정보 관리 서비스를 작동시켜야 한다. [시작]-[프로그램]-[관리 도구]-[컴퓨터 관리]를 실행하고 [서비스 및 응용 프로그램]-[서비스]를 선택하여 "ASP.NET State" 서비스를 시작시킨다.

SQLServer 모드를 사용하려면 mode 속성을 "SQLServer"로 설정하고 데이터베이스 연결 문자열을 지정한다.
<sessionState
   mode="SQLServer"
   sqlConnectionString="data source=127.0.0.1;user id=sa;password="
   cookieless="false"
   timeout="20"
/>
 
<sessionState> 섹션에서 나머지 속성의 의미를 살펴보자.
  • cookieless: ASP.NET에서는 기본적으로 쿠키를 사용하여 서버와 클라이언트간에 Session ID를 전송한다.쿠키를 사용하지 않고 URL에 Session ID를 포함시키는 방법을 사용하려면 "true"로 설정한다.
  • timeout: 세션의 지속 시간(분 단위).

자료출처 : http://blog.empas.com/dizzius/3749921

'.net' 카테고리의 다른 글

ASP.NET 캐시  (0) 2007.05.03
GET, POST, Multipart/form-data의 처리  (1) 2007.05.03
<FONT face="굴림">을 없애고 싶습니다  (0) 2007.05.03
포스트백 막아주는 스크립트  (0) 2007.05.03
Caching in ASP.NET  (0) 2007.05.03

+ Recent posts