2007년 11월 6일 화요일

세션 배열

Session Object (IIS)

출처
MSDN - Session Object (IIS)

세션 객체를 이용하여 개별적인 사용자 세션을 관리하기 위해 필요한 정보를 저장할 수 있다. 사용자가 어플리케이션의 페이지 사이를 이동할 때마다 정보를 버리지 않고 변수들에 저장한다. 대신에 이 변수들은 사용자 세션 내내 유지된다.

웹서버는 세션을 가지지 않은 사용자에 의해 어플리케이션내에서 웹페이지가 호출되면 자동으로 세션 객체를 생성한다. 서버는 세션이 만료되거나 끊어지면 세션 객체를 제거한다.

세션 객체의 일반적인 용도는 사용자 정보를 저장하는데 목적이 있다. 예를 들어 사용자가 숨겨진 정보를 나타내기위해 세션 객체를 사용하여 그 정보를 저장할 수 있다. 세션 객체에 대한 더많은 정보는 the Acive Server Page & Web Application Guide 섹션의 Managing Sessions를 보라.



노트
세션 상태는 오직 쿠키를 지원하는 브라우저에서만 유지된다.



메소드
Session.Abandon
세션 객체 및 관련 리소스를 제거한다.

Session.Contents.Remove
Contents 컬렉션으로부터 아이템을 삭제한다.

Session.Contents.RemoveAll
Contents 컬렉션의 모든 아이템을 삭제한다.



속성
Session.CodePage
전체 세션에서 사용되는 고유한 객체들의 데이터를 위한 코드 페이지를 설정한다. 코드 페이지는 상이한 언어들을 위한 문자의 인코딩 방법을 서버에게 알려준다.

Session.Contents 컬렉션
스크립트 명령을 통해 세션에 추가한 아이템이 들어있다.

Session.LCID
전체 세션에서 사용되는 데이터의 LCID 값을 설정한다. LCID는 특정 지역 시간대에 맞는 날짜와 시간, 통화의 표시 방법을 알려준다.

Session.SessionID
현재 사용자의 세션 인식값을 내놓는다.

Session.StaticObject 컬렉션
Global.asa 파일에서 오브젝트 태그에 의해 session에 한정된 객체를 가지고 있다.

Session.Timeout
현재 어플리케이션의 세션 상태 유지의 분 단위의 만료값.





이벤트


Session_OnEnd 이벤트
세션이 제거되거나 만료될 때 발생난다.

Session_OnStart 이벤트
서버에 새로운 세션이 생성될 때 발생한다.





설명


세션 객체에 값들을 저장할 수 있다. 세션 객체에 저장된 정보는 세션과 주어진 세션 범위을 통해 사용 가능하다. 다음 스크립트를 통해 두가지 형식의 변수에 값을 저장하는 예를 보인다:

<%
Session("username") = "Janine"
Session("age") = 24
%>

만일 세션 객체에 객체를 저장하려고 한다면 VBScript에서는 Set 예약어을 사용하여 다음과 같이 코딩한다:

<% Set Session("Obj1") = Server.CreateObject("MyComponent.class1") %>

이렇게 저장된 MyComponent.class1 객체의 메소드와 속성을 웹 페이지에서 다음과 같이 사용한다:

<% Session("Obj1").MyMethod %>

혹은 다음처럼 객체의 로컬 복사본을 얻어내어 사용하기도 한다:

<%
Set MyLocalObj1 = Session("Obj1")
MyLocalObj1.MyObjMethod
%>

다른 방법으로 Global.asa 파일에 오브젝트 태그를 사용하여 session 한정자와 함께 객체를 생성한다.

그렇지만 Session 객체에 내장 객체를 저장할 수는 없다. 다음 예는 에러를 내놓는다.

<%
Set Session("var1") = Session
Set Session("var2") = Request
Set Session("var3") = Response
Set Session("var4") = Server
Set Session("var5") = Application
%>

Session 객체에 객체를 저장하기 전에 세션 객체는 쓰레딩 모델을 사용한다는 것을 염두해 두어야한다. 세션 객체는 잠금 없는 단일 쓰레드로 처리되기 때문에 객체가 서로 덮어쓸 수 있다.
세션 객체안에 배열을 저장하려고 한다면 저장된 배열 요소들을 직접 변경하는 시도를 피해야 한다. 예를 들어 다음과 같은 스크립트의 작성은 안된다:

<% Session("StoredArray")(3) = "new value" %>

Session 객체는 컬렉션처럼 구현되어 있기 때문에 위의 스크립트는 동작하지 않는다. 배열 요소인 StoredArray(3)은 새로운 값을 받지 못한다. 대신에, 그 값은 컬렉션의 색인값으로 사용되고 그 위치에는 의미없는 정보가 저장된다.

만약 세션 객체에 배열을 저장하기를 원한다면 배열 요소의 값을 구하거나 변경하기 전에 배열을 복사본을 사용하기를 강력하게 추천한다.

다음 예는 처리가 끝나 배열을 세션 객체에 저장했다가 불러내어 값을 변경한 후 다시 저장하는 예이다.

--- File1.asp ---
<%
'Creating and initializing the array
Dim MyArray()
Redim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"

'Storing the array in the Session object.
Session("StoredArray") = MyArray

Response.Redirect("file2.asp")
%>

--- File2.asp ---

'Retrieving the array from the Session Object
'and modifying its second element.
LocalArray = Session("StoredArray")
LocalArray(1) = " there"

'Printing out the string "hello there."
Response.Write(LocalArray(0)&LocalArray(1))

'Re-storing the array in the Session object.
'This overwrites the values in StoredArray with the new values.
Session("StoredArray") = LocalArray