우선 세션아이디라 불리는 연결과 관련된 고유값 생성하고 "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"는 세션설정의 방법을 보여준다.
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"를 살펴보자.
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"를 통해 살펴보자.
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"를 살펴보자.
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로 출력된다.
'프로그래밍 > JSP' 카테고리의 다른 글
쿼리스트링(Query String) (2) | 2009.03.18 |
---|---|
쿠키 및 세션을 이용한 카운터 (0) | 2009.03.17 |
쿠키 (0) | 2009.03.17 |
continue, break 문 (1) | 2009.03.09 |
while, do 문 (0) | 2009.03.09 |