본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/JAVA

JSP 기본(내장) 객체 - 세션(session)

by 미노드 2017. 3. 24.

1. 세션(session)

- API : http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSession.html

쿠키가 웹 브라우저에 사용자의 상태를 유지하기 위한 정보를 저장했다면, 세션(session)은 웹 서버 쪽의 웹 컨테이너에 상태를 유지하기 위한 정보를 저장한다.


세션은 사용자의 정보를 유지하기 위해 javax.servlet.http 패키지의 HttpSession 인터페이스를 구현해서 사용한다. 쿠키는 사용자의 상태 유지를 위한 정보를 웹 브라우저에 저장해서 웹 서버가 쿠키 정보를 읽어서 사용한다.

이것은 웹 브라우저에 저장된 쿠키는 웹 서버에서 열어볼 수 있다는 점에서 보안상 문제가 발생할 수 있다.

따라서 사용자의 정보를 유지하기 위해서는 쿠키를 사용하는 것보다 세션을 사용한 웹 브라우저와 웹 서버의 상태 유지가 훨씬 안정적이고, 보안상의 문제도 해결할 수 있다.


세션은 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장된다.




- 쿠키와 달리 웹 브라우저에 정보를 보관하는 것이 아니라, 웹 컨테이너에 정보를 보관할 때 사용한다.

- 오직 서버에서만 생성된다.

- 하나의 웹 브라우저에 하나의 세션을 생성한다.

- 웹 브라우저의 여러 요청을 처리하는 JSP 페이지 사이에서 공유되므로 1:1 매핑되는 값을 저장할 때 사용한다.

- 세션이 쿠키보다 보안에 앞서고, 쿠키 설정 여부에 상관없이 사용이 가능하다.


2. 세션 메소드 리스트


 메소드 이름

리턴 타입 

설명 

getAttribute(String name) 

 java.lang.Object

 세션 속성명이 name인 속성의 값을 Object 타입으로 리턴한다. 해당 되는 속성명이 없을 경우에는 null 값을 리턴한다.

getAttributeNames() 

java.util.Enumeration 

 세션 속성의 이름들을 Enumeration 객체 타입으로 리턴한다.

getCreationTime() 

long 

1970년 1월 1일 0시 0초를 기준으로 하여 현재 세션이 생성된 시간까지 경과한 시간을 계산하여 1/1000초 값으로 리턴한다. 

getId() 

java.lang.String 

세션에 할당된 고유 식별자를 String 타입으로 리턴한다. 

getMaxInactiveInterval()

int 

현재 생성된 세션을 유지하기 위해 설정된 세션 유지시간을 int형으로 리턴한다.

invalidate() 

void 

현재 생성된 세션을 무효화 시킨다.

removeAttribute(String.name)

void 

세션 속성명이 name인 속성을 제거한다. 

setAttribute(String name, Object value)

void 

세션 속성명이 name인 속성에 속성값으로 value를 할당한다. 

setMaxInactiveInterval(int interval) 

void 

세션을 유지하기 위한 세션 유지시간을 초 단위로 설정한다. 


3. 세션 생성

- <@ page session = "true" %>

- session.setAttribute("세션이름", "값");

- page 디렉티브의 session 속성의 기본값은 ture 이므로 false로 지정하지 않으면 자동 생성된다.


4. 세션 기본 객체

- setAttribute(), getAttribute() 등의 메서드를 사용하여 속성값을 저장하거나 읽어오고, 세션만의 고유 정보를 제공한다.

- 각각의 세션을 구분하기 위해 고유의 세션 ID를 할당한다.

- 세션 ID는 쿠키를 통해서 웹 브라우저에 전달된다.

- 가장 최근에 사용한 시간을 기록한다.


<!-- session.jsp --> <%@page import="java.text.SimpleDateFormat"%> <%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% Date t = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); %> <!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=UTF-8"> <title>세션 정보</title> </head> <body> 세션 ID : <%= session.getId() %><br> <% t.setTime(session.getCreationTime()); %> 세션 생성시간 : <%= sf.format(t) %><br> <% t.setTime(session.getLastAccessedTime()); %> 최근 접근시간 : <%= sf.format(t) %> </body> </html> <!-- 실행결과 세션 ID : 7FE891620D3A4A35E80FBBD176B86116 세션 생성시간 : 2013-09-22 03:33:10 최근 접근시간 : 2013-09-22 03:34:12 -->



5. 세션 기본 객체의 속성

- 세션의 값을 저장할 때 속성을 사용한다.

- 세션 기본객체의 속성을 저장하면 세션이 종료되기 전까지는 속성값을 사용할 수 있다.


<!-- setSession.jsp -->

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	session.setAttribute("ID", "gz");
	session.setAttribute("NAME", "갱짱");
%>
<!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=UTF-8">
<title>세션에 정보 저장</title>
</head>
<body>
	세션에 정보를 저장~<br>
	
	<%
		String id = (String) session.getAttribute("ID");
		String name = (String) session.getAttribute("NAME");
	%>
	<br>
	아이디 : <%= id %><br>
	이름 : <%= name %><br>
</body>
</html>

<!-- 
	실행결과
	
	세션에 정보를 저장~

	아이디 : gz
	이름 : 갱짱
 -->



6. 세션 종료

- invalidate() 메서드를 사용하여 세션을 종료한다.

- 세션이 종료되면 기존에 사용하던 세션 기본 객체가 삭제되고 다음에 세션을 사용할 때에는 새로운 세션 기본객체가 사용된다.


7. 세션 유효시간

- 세션은 마지막 접근 시간으로부터 일정 시간 이내에 다시 세션에 접근하지 않을 경우 자동으로 종료하는 기능을 갖고 있다.

- 세션의 유효시간은 web.xml 파일에 <session-config> 태그로 설정하는 방법과 setMaxInactiveInterval() 메서드를 사용하는 2가지 방법이 있다.

- <session-timeout> 의 값을 0이나 음스로 설정하면 세션은 유효 시간을 갖지 않는다.

- 유효시간이 없는 상태에서 invalidate() 메서드를 명시적으로 실행하지 않으면 한번 생성된 세션 객체는 계속 메모리에 남아 있게 된다.



<!-- web.xml -->

	<session-config>
		<session-timeout>60</session-timeout>
	</session-config>


<%
	session.setAttribute("ID", "gz");
	session.setAttribute("NAME", "갱짱");
	session.setMaxInactiveInterval(60 * 60);
%>