session의 원래 클래스형은 HttpSession 인터페이스입니다. 이 session객체는 사용자가 하나 이상의 페이지를 요구 하거나, 다른 사이트로의 방문, 또는 저장된 정보를 접근할 때 사용자를 확인해주는 기능을 합니다.
원래 Http는 비연결 지향성(stateless) 즉, 한번 접속한 후 연결이 유지되지 않고 끊어지기 때문에 접속한 클라이언트나, 사용자에 대한 정보를 가지고 있지 않습니다. 이와 반대되는 개념이 연결지향성(stateful)으로 한번 접속하면 그 접속이 계속 유지되는 것을 말합니다. stateless한 연결상태를 stateful하게 만들어주는 방법중의 하나가 세션입니다.
세션은 서버가 가지고 있는 일종의 출석부라고 생각하면 됩니다. HTTP서버가 HTTP클라이언트나 사용자들을 구분해야 할 경우에는 그들을 구분할 수 있는 각각 다른 이름이 표시된 이름표를 달아주어서 그 출석부와 이름표를 가지고 상대방의 정보를 유지하는 것입니다. 세션은 지정된 시간 동안이나, 사용자가 페이지를 계속 요구하는 동안에만 존재합니다. 그 이외의 경우에는 세션은 소멸되며 stateless한 상태로 돌아가게 됩니다.
JSP 내장 객체인 세션은 다음과 같이 얻어집니다.
n session = pageContext.getSession();
그리고 세션ID와 ID에 따른 값을 얻는 방법은 다음과 같습니다.
n session.getID();
n session.getValue(“ID”);.
여기서는 이렇게 세션의 일반적인 의미만 살펴보겠습니다. 그리고 다음 장에서 쿠키와 함께 다른 시각에서 자세히 알아보게 되니 기본적인 의미만 알고 넘어 가십시요. 다음은 세션 유효시간을 설정하고, 세션의 정보를 가져오는 것과 같은 작업을 하는 예제입니다.
SessionTest.jsp |
세션을 테스트한 예제 |
| |
|
결과를 보시면, 세션에 관한 다양한 정보가 출력되었음을 알 수 있습니다.
SetMaxInactiveInterval() 은 세션을 유지할 시간을 설정하는 메서드입니다. 이 시간이 지나면 세션은 자동으로 종료됩니다. 단위는 sec입니다. 여기서는 1분을 설정했군요. 세션유지시간을 5분으로 설정하시려면 1 대신에 5를 넣으면 되겠지요.
n <% session.setMaxInactiveInterval(1*60); %>
isNew()는 세션이 처음 생성되었을 경우엔 true를, 이미 생성되어 있었을 경우엔 false를 반환합니다. 최초의 요청시에는 true를 반환하지만 세션 유지 시간 내에 재요청시 false를 반환합니다. 세션 유지 시간이 지난 후 요청을 한다면 다시 true를 반환하겠죠.
n <%=session.isNew()%>
getId()는 이 세션에 할당된 유일한 이름(일종의 id)을 반환해주는 메서드입니다. 이 이름은 서블릿컨테이너가 할당해줍니다.
n <%=session.getId() %>
getCreationTime()은 세션이 처음 생성된 시간을 sec로 반환해주는 메서드입니다. Date객체를 사용하여 표준시로 변환하였습니다.
n <%=new java.util.Date(session.getCreationTime()).toString() %>
getLastAccessedTime()은 세션이 유지되는 동안 마지막에 접속한 시간을 sec로 반환해주고 있습니다. 역시 Date객체를 사용하여 표준시로 변환하였습니다.
n <%=new java.util.Date(session.getLastAccessedTime()).toString() %>
getMaxInactiveInterval()은 설정된 세션 유지 시간 값을 불러오는 메서드입니다. 즉 setMaxInactiveInterval()의 값을 불러오는 것이겠지요. 단위는 역시 sec입니다.
n <%=session.getMaxInactiveInterval() %>
세션이 유지되는 동안에 새로 고침을 눌러 보면서 각각의 값을 비교해보면 세션을 이해하는 데 많은 도움이 될 것입니다. 좀더 자세한 내용은 6장에서 다루어 보도록 하겠습니다.
HttpSession의 멤버메서드 |
|
public java.lang.Object getAttribute(java.lang.String name) : 지정된 이름의 세션에 묶인 객체를 반환합니다. public java.util.Enumeration getAttributeNames() : 세션에 지정된 객체의 이름을 열거합니다. public long getCreationTime() : 1970. 1.1 GMT 부터 세션이 만들어졌을 때 까지의 시간을 밀리초의 단위로 반환합니다. public java.lang.String getId() : 세션에 지정된 고유한 이름을 반환합니다. public long getCreationTime() : 세션이 처음 생성된 시간을 밀리 초로 계산하여 long형 정수로 리턴합니다. 기준은 70년1월1일 00시 00분 00초입니다. public long getLastAccessedTime() : 클라이언트 요청이 마지막으로 시도된 시간을 밀리초로 반환합니다. public int getMaxInactiveInterval() : 클라이언트의 요구가 없을 때 서버가 현재의 세션을 언제까지 유지할지를 정수로 리턴합니다. 이때 기본 디폴트 세션마감시간은 30분으로 지정되어 있습니다. 단위는 sec입니다. public void invalidate() : 현재의 세션을 종료시킵니다. public boolean isNew() : 서버측에서 새로운 session객체를 생성하고 아직 클라이언트에게 세션ID를 할당하지 않은 경우 true를 반환하고 기존의 세션이 유지되고 있는 상태라면 false를 반환합니다. public void setMaxInactiveInterval(int seconds) : 세션 유지 시간을 설정합니다. 이 시간이 지나면 세션은 종료됩니다. |