세션

By | 2009년 3월 17일

세션은 서버가 저장 관리하는 웹프로그램의 실행에 필요한 정보로 쿠키와 같은 목적으로 사용되나 필요한 정보를 클라이언트가 아닌 서버가 가지고 있다는 점에서 차이가 있다. 세션은 다음과 같은 처리과정을 거친다.

우선 세션아이디라 불리는 연결과 관련된 고유값 생성하고 “JSESSIONID”라는 쿠키이름과 세션아이디를 쿠키값으로 가지는 쿠키의 생성과 동시에 서버에 세션아이디로 구분할 수 있는 저장공간 생성한 후 setAttribute 메소드에 의해 만들어진 세션정보를 생성된 공간에 저장한다. 그 후 해당 클라이언트로부터 접속이 이루어지면 해당 클라이언트는 “JSESSIONID”/”세션아이디”의 쌍으로 이루어진 쿠키 정보도 함께 전달한다. 그러면 서버는 이 쿠키정보로부터 전달된 세션아이디를 추출 이와 관련된 저장공간으로부터 세션정보를 읽는다.

JSP에서 세션은 session 객체에 의해 처리된다. seession 객체에서 사용되는 중요 메소드는 다음과 같다.

 Method

 설명

 String getId()

 현재 사용자의 고유한 세션id를 반환받음

 boolean isNew()

 사용자 컴퓨터에 세션 ID의 존재 여부를 반환 (만들어지지 않은 경우 true)

 void setMaxInactiveInterval(time)

 세션의 지속 시간을 초 단위로 결정

 Int getMaxInactiveInterval()

 현재 설정된 세션의 지속
시간을 초로 환산

 void setAttribute(string name,
object value)

 현재 세션에 새로운 이름과
값의 속성을 저장

 Enumeration getAttributeNames()

 현재 세션에 저장된 모든
속성들의 이름을 Enumeration 형으로 반환

 void invalidate()

 현재 세션에 저장된 모든 속성을 삭제

세션 설정

세션의 설정은 session 객체의 setAttribute 메소드를 이용하며, 쿠키와 마찬가지로 “세션이름”/”세션값”의 쌍으로 생성된다.

다음 프로그램 “addSession.jsp”는 세션설정의 방법을 보여준다.

<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<%
String id = “lovejsp”;
String pass = “1234”;
session.setAttribute(“sid”, id);
session.setAttribute(“spass”, pass);
%>
세션을 설정했습니다.
</body>
</html>
사용자 삽입 이미지

addSession.jsp 실행결과

위 프로그램에서는 session.setAttribute 메소드를 이용 “sid”와 “spass”라는 세션이름에 각각 세션값  “lovejsp”와 “1234”의 쌍을 이루어 지정하였다. 이 정보는 서버의 어딘가에 고유세션아이디와 관련된 영역을 만들어 저장된다.

세션 읽기

지정된 세션은 session 객체의 getAttribute 메소드를 이용 프로그램에서 활용할 수 있다. 이 메소드에서 필요한 파라메터는 세션지정시 설정된 세션이름으로 이름과 연관되어 저장된 값을 얻을 수 있다. 다음 프로그램 “getSession.jsp”를 살펴보자.

<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
세션아이디 <%= session.getId() %>
<br />
<%
String myid = (String)session.getAttribute(“sid”);
String mypass = (String)session.getAttribute(“spass”);
%>
아이디는 <%=myid%> 이고, 비밀번호는 <%=mypass%> 입니다.
</body>
</html>
사용자 삽입 이미지

getSession.jsp 실행결과

위 프로그램은 세션이름 “sid”와 “spass”에 저장된 값을 읽어 출력하고 있다. 따라서 프로그램 “addSession.jsp”에 의해 각각 값이 “lovejsp”, “1234”가 저장되었으므로 위 프로그램의 출력 역시

“아이디는 lovejsp 이고 비밀번호는 1234 입니다”

가 출력된다. 만약 브라우저가 실행된 후 “addSesseio.jsp”가 실행되지 않고 바로 “getSession.jsp”가 실행되었다면 세션이름 “sid”와 “spass”로 서버에 저장된 값이 없으로므 그 결과는 다음과 같이 해당 값이 null로 처리되어 출력된다.

여기서 “JSESSIONID” 이름의 쿠키와 현재 세션아이디를 반환하는 session 객체의 getId의 결과를 프로그램 “SessionID.jsp”를 통해 살펴보자.

<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
세션아이디 : <%= session.getId() %>
<br/><br/>
<table border=”1″>
<tr>
<td>쿠키이름</td>
<td>쿠키값</td>
<%
    Cookie [] cookie = request.getCookies();
   
    for(int i = 0; i < cookie.length; i++)
    {
%>
    <tr>
    <td><%=cookie[i].getName()%></td>
    <td><%=cookie[i].getValue()%></td>
    </tr>
<%
    }
%>
</table>
</body>
</html>

사용자 삽입 이미지

sessionID.jsp 실행결과


위 프로그램의 결과를 살펴보면 session.getId()에 의해 얻어진 값과 쿠키이름 “JSESSIONID”에 저장된 쿠키값이 일치함을 알 수 있다. 결과적으로 “JSESSIONID”에 저장된 쿠키값이 세션아이며 클라이언트에서 전달된 이 세션아이디를 통해 서버에 저장된 관련 세션정보를 찾게된다.

세션삭제

세션아이디는 기본적으로 한번 지정된 후 브라우저가 종료될 때까지 유지되었다가 브라우저 종료 후 새로 실행되면 새로운 세션아이디가 부여된다. 그러나 session.invalidate() 메소드를 이용하면 브라우저를 종료하지 않고 새로운 세션아이디를 부여할 수 있다. 다음 프로그램 “delSession.jsp”를 살펴보자.

<%@ page language=”java” contentType=”text/html; charset=EUC-KR”
    pageEncoding=”EUC-KR”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
“http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-KR”>
<title>Insert title here</title>
</head>
<body>
<% session.invalidate(); %>
기존 세션아이디 <%= session.getId() %>를 삭제하고 새로운 세션아이디를 부여했습니다.
</body>
</html>

사용자 삽입 이미지

addSession.jsp 실행결과

사용자 삽입 이미지

getSession.jsp 실행결과

사용자 삽입 이미지

delSession.jsp 실행결과

사용자 삽입 이미지

delSession.jsp 실행 후 getSession.jsp 실행결과


위 프로그램은 session.invalidate() 메소드에 의해 새로운 세션아이디를 부여한다. 그러므로
“addSession.jsp”, “getSession.jsp”, “delSession.jsp”, “getSession.jsp”을 순서대로 실행하면 맨 마지막 실행한 “getSession.jsp”의 세션아이디가 새롭게 부여되어 변경되었음을 확인할 수 있으며, 이에 따라 새로 부여된 세션아이디로 지정된 “sid”와 “spass”값은 없으므로 null로 출력된다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.