서버 세션을 사용하면 클라이언트의 상태를 저장할 수 있다. 쿠키와의 차이점은 세션은 서버에 값을 저장한다는 점이다.
세션은 웹 컨테이너에 정보를 보관할 때 사용한다. 세션은 오직 서버에만 생성된다.
웹 컨테이너는 기본적으로 한 웹 브라우저마다 한 세션을 생성한다. 같은 JSP 페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용한다. 웹 브라우저마다 세션이 따로 존재하기 때문에 세션은 웹 브라우저와 관련된 정보를 저장하기에 알맞은 장소이다. 세션을 생성해야 정보를 저장할 수 있다. session 기본 객체를 통해 세션을 사용할 수 있다.
세션 관련 메소드
setAttribute() |
세션에 데이터를 저장 |
getAttribute() |
세션에서 데이터 얻음 |
getAttributeNames() |
세션에 저장되어 있는 모든 데이터의 이름(유니크한 키값) 얻음 |
getId() |
자동 생성된 세션이 유니크한 아이디를 얻음 |
isNew() |
세션이 최초 생성되었는지, 이전에 생성된 세션인지 구분 |
getMaxInactiveInterval() |
세션의 유효시간을 얻음. 최근 요청시점을 기준으로 카운트 |
removeAttribute() |
세션에서 특정 데이터 제거 |
invalidate() |
세션의 모든 데이터 삭제 |
sessioninit.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.setAttribute("mySessionName","mySessionData"); //속성 지정, (이름, 값)
session.setAttribute("myNum",12345);
%>
<a href="sessionget.jsp">session get</a>
</body>
</html>
sessionget.jsp 파일
<%@page import="java.util.Enumeration" %>
<%@ 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>
<%
Object obj1 = session.getAttribute("mySessionName"); //특정 객체를 얻어옴, 반환형이 Object임
String mySessionName = (String)obj1;//Object 타입을 String 형변환
out.println(mySessionName+"<br/>");
Object obj2 = session.getAttribute("myNum");
Integer myNum = (Integer)obj2;
out.println(myNum+"<br/>");
out.println("******************</br>");
String sName;
String sValue;
Enumeration enumeration = session.getAttributeNames();//모든 객체 이름 얻어옴
while(enumeration.hasMoreElements()){ //enumeration에 객체가 있으면
sName = enumeration.nextElement().toString(); //이름을 넣음
sValue = session.getAttribute(sName).toString();//이름으로 값을 받아옴
out.println("sName:"+sName+"<br/>");
out.println("sValue:"+sValue+"<br/>");
}
out.println("****************</br>");
String sessionID = session.getId(); //브라우저에 맞는 ID 가져옴
out.println("sessionID:"+ sessionID +"<br/>");
int sessionInter = session.getMaxInactiveInterval();//유효시간
out.println("sessionInter:"+sessionInter+"<br/>");
out.println("*****************<br/>");
session.removeAttribute("mySessionName"); //세션 삭제, myNum만 남음
Enumeration enumeration1 = session.getAttributeNames();
while(enumeration1.hasMoreElements()){
sName = enumeration1.nextElement().toString();
sValue = session.getAttribute(sName).toString();
out.println("sName:"+sName+"<br/");
out.println("sValue:"+sValue+"<br/>");
}
out.println("***********************<br/>");
session.invalidate(); //세션의 모든 데이터 삭제
if(request.isRequestedSessionIdValid()){ //유효 세션이 있는지
out.println("session valid");
}else{
out.println("session invalid");
}
%>
</body>
</html>