관리 메뉴

Just Do it

세션(Session)이란? 본문

1. 세션이란? 

- 세션: 쿠키를 이용하여 서로 관련된 요청과 응답들을 하나로 묶은 것. 브라우저마다 가지고 있는 개별 저장소와 같다. 

- 서버에서 브라우저마다 세션 객체를 제공하며 세션은 서버에 저장된다. 

- 원래는 요청과 응답이 독립적인데 서버에서 쿠키를 이용해서 세션 아이디를 브라우저에 보내줌으로써 그 이후 요청부터는 같은 세션 아이디 아래 요청이 포함되게한다. 그래서 요청과 응답들이 하나로 묶일 수 있는 것이다. 쉽게 생각하면 로그인부터 로그아웃까지가 하나의 세션이다. 

 

2. 세션의 생성 과정

- 처음에 브라우저가 서버에 요청을 하면 서버는 무조건 세션 객체 하나를 만든다. 

- 그리고 서버는 이 세션을 쓸 수 있는 세션 아이디가 담긴 쿠키를 만들어 브라우저에 응답을 보낸다.

- 브라우저에는 서버에서 보낸 세션아이디가 담긴 쿠키가 저장되고 브라우저에서 서버에 요청을 보낼때마다 이 쿠키를 사용한다.

- 서버는 브라우저에서 보낸 세션 아이디를 비교하여 같은 브라우저에서 온 요청인지 확인할 수 있다.

 

3. 세션 객체 얻기

- 쿠키는 브라우저마다 저장되므로 브라우저마다 다른 세션 아이디를 갖는다. 

- 같은 컴퓨터라고 하더라도 브라우저가 다르면 세션 아이디가 다르다. 

 

4. 세션과 관련된 메서드

메서드 설명
String getId() 세션의 ID를 반환
long getLastAccessedTime() 세션 내에서 최근 요청을 받은 시간을 반환
boolean isNew() 새로 생성된 세션인지를 반환. request.getSession() 호출 후 사용
void setMaxInactiveInterval(int interval) 세션 예약 종료. 지정된 시간(초)후에 세션을 종료 (예약 종료)
void invalidate() 세션 즉시 종료. 세션 객체를 제거 (저장된 객체도 함꼐)
int getMaxInactiveInterval() 예약된 세션 종료 시간을 반환 

*아래 표는 pageConext, request, session, application 네 가지 기본 객체에서 모두 사용되는 메서드이다.  

속성 관련 메서드 설명
void setAttribute(String name, Object value) 지정된 값(value)을 지정된 속성 이름(name)으로 저장
Object getAttribute(String name) 지정된 이름(name)으로 저장된 속성의 값을 반환
void removeAttribute(String name) 지정된 이름(name)의 속성을 삭제
Enumeration getAttributeNames() 기본 객체에 저장된 모든 속성의 이름을 반환 

 

5. 세션의 종료 

5.1 수동 종료

HttpSession session = request.getSession();
session.invalidate();                  // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30*60); // 2. 예약 종료 (초단위), 30분 후 종료

 

5.2 자동 종료 

<session-config>
	<session-timeout>30</session-timeout> // 분 단위. 30분 후 종료 
</session-config>

 

6. 쿠키와 세션 비교

쿠키(Cookie) 세션(HttpSession)
브라우저에 저장 서버에 저장
서버 부담 X  서버 부담 O
보안에 불리 보안에 유리
서버 다중화에 유리 서버 다중화에 불리

 

***

7. 참고 사항  

 

*loginForm.jsp 파일의 <body> 내에 있는 <form> 태그 내 action="경로" 입력시 큰 따옴표 안에 아래와 같이 

<c:url value='/경로'/>로 넣어줘야한다. 그래야 쿠키 생성 차단을 한 클라이언트의 세션ID가 계속 바뀌는걸 방지하여 서버 부담을 줄일 수 있다. 

<body>
    <form action="<c:url value='/login/login'/>" method="post" onsubmit="return formCheck(this);">

 

*세션 객체를 얻어 올 때:

// 세션 객체를 얻어오기. 메서드의 매개변수로 HttpServletRequest request 를 추가해줘야한다. 
HttpSession session = request.getSession();
// 세션 객체에 id를 저장한다. 
session.setAttribute("id", id);
// 세션 객체에 저장된 id를 가져온다.
session.getAttribute("id")