세션(session)
클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법
사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것
세션은 웹 서버에만 접근이 가능하므로 보안 유지에 유리하며 데이터를 저장하는 데 한계가 없음.
세션은 오직 웹 서버에 존재하는 객체로 웹 브라우저마다 하니씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 되며, 이러한 세션을 사용하면 클라이어트가 웹 서버의 세션에 가상으로 연결된 상태가 됨.
따라서 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않음.

session 내장 객체 메소드의 종류
| 메소드 | 반환 유형 | 설명 |
| getAttribute(String name) | java.lang.Object | 세션 속성 이름이 name인 속성 값을 Object형으로 반환. 해당되는 속성 이름이 없을 때는 null을 반환하며, 반환 값이 Object 형이므로 반드시 형 변환을 하여 사용해야한다. |
| getAttributeNames( ) | java.util.Enumeration | 세션 속성 이름을 Enumeration 객체 타입으로 반환한다. |
| getCreationTime( ) | long | 세션이 생성된 시간을 반환. 1970년1월1일0시0초부터 현재 세션이 생성된 시간까지 경과한 시간을 1/1,000초 값으로 반환 |
| getId( ) | java.lang.String | 세션에 할당된 고유 아이디를 String 형으로 반환 |
| getLastAccessedTime( ) | long | 해당 세션에 클라이언트가 마지막으로 request를 보낸 시간을 반환 |
| getMaxInactiveInterval(int interval) | int | 해당 세션을 유지하기 위해 세션 유지 시간을 반환. 기본값은 1,800초(30분) |
| isNew( ) | boolean | 해당 세션의 생성 여부를 반환. 처음 생성된 세션이면 true를, 이전에 생성된 세션이면 false를 반환 |
| removeAttribute(String name) | void | 세션 속성 이름이 name인 속성을 제거. logout할때 사용 |
| setAttribute(String name, Object value) | void | 세션 속성 이름이 name인 속성에 value를 할당 |
| setMaxInactiveInterval(int interval) | void | 해당 세션을 유지하기 위한 세션 유지 시간을 초 단위로 설정 |
| Invalidate( ) | x | 현재 세션에 저장된 모든 세션 속성을 제거. logout할때 사용. |
세션 생성
- session 내장 객체의 setAttribute( )메소드를 사용
// 기본 형식
void setAttribute(String name, Object value)
// example
session.setAttribute("memberId","admin");
첫번째 매개변수 name은 세션으로 사용할 세션 속성 이름을 나타내며, 세션에 저장된 특정 값을 찾아오기 위한 키로 사용.
두 번째 매개변수 value는 세션의 속성 값을 나타내며, 세션 속성 값은 Object 객체 타입만 가능하기 때문에 int, double, char등의 기본 타입은 사용할 수 없음.
2. request.getSession( )을 이용한 세션 생성
<%@ page session="false" %>
<%
HttpSession httpSession=request.getSession();
List list=(List)httpSession.getAttribute("list);
list.add(bookId);
%>
HttpSession을 생성하는 또 다른 방법은 request 기본 객체의 getSession( )메소드를 사용하는 것.
request.getSession( )메소드는 현재 요청과 관련된 session 내장 객체를 반환
request.getSession( )메소드는 세션이 생성되어 있으면 생성된 세션을 반환하고, 생성되어 있지 않으면 새롭게 세션을 생성해서 반환함.
3. <%@ page session = “true” %>를 이용한 세션 생성
<%@ page session="true" %>
<%
...(생략)...
session.setAttribute("userInfo', userInfo);
...(생략)...
%>
page 디렉티브 태그 내 session 속성의 기본값이 true이므로 session 속성의 값을 false로 지정하지만 않으면 세션이 생성됨. 일단 세션이 생성되면 session 내장 객체를 통해 세션을 사용할 수 있음.
세션 정보
생성된 세션의 정보를 얻어오려면 session 내장 객체의 getAttribute( ) 또는 getAttributeNames( ) 메소드를 사용.
- 단일 세션 정보 얻기 - getAttribute( )메소드 사용
// 기본 형식
Object getAttribute(String name)
//example
String id=(String)session.getAttribute("memberId");
getAttribute( )메소드는 반환 유형이 Object 형이므로 반드시 형 변환을 하여 사용해야 함.
2. 다중 세션 정보 얻기 - getAttributeNames( )메소드 사용
// 기본 형식
Enumeration getAttributeNames();
// example
Enumeration enum=session.getAttributeNames();
while(enum.hasMoreElements()) {
String name=enum.nextElement().toString();
String value=session.getAttribute(name).toString();
}
getAttributeNames( )메소드는 반환 유형이 Enumeration(열거) 객체 타입이므로 모든 세션 정보를 얻어오는데 유용하며, 이 객체를 사용하려면 java.util.Enumeration을 import해야함.
세션 삭제
생성된 세션을 더 유지할 필요가 없으면 session 내장 객체의 removeAttribute( ) 또는 invalidate ( ) 메소드를 사용하여 세션을 삭제하며, 세션이 삭제되면 현재 사용 중인 session 내장 객체가 삭제되므로 session 내장 객체에 저장된 모든 속성도 함께 삭제됨.
- 단일 세션 삭제하기 - removeAttribute( ) 메소드 사용
// 기본 형식
void removeAttribute(String name)
// example
session.removeAttribute("memberId");
매개변수 name은 세션에 저장된 속성 이름.

2. 다중 세션 삭제하기 - invalidate ( ) 메소드 사용
// 기본 형식
void invalidate()
// example
session.invalidate()
세션에 저장된 모든 세션 속성 이름을 삭제
세션 유효 시간
세션을 유지하기 위한 세션의 일정 시간.
웹 브라우저에 마지막 접근한 시간부터 일정 시간 이내에 다시 웹 브라우저에 접근하지 않으면 자동으로 세션이 종료됨.
// 기본 형식
void setMaxInactiveInterval(int interval)
// example
session.setMaxInactiveInterval(60*60);
매개변수 interval은 세션 유효 시간이며, 기본값이 1,800초(30분)이고 초 단위로 설정함.
세션을 삭제했을 때 session.invalidate() 메소드를 호출하지 않으면 생성된 세션 속성이 웹 서버에서 제거되지 않고 유지됨. 즉, 세션 유효 시간이 없는 상태에서 session.invalidate()메소드를 명시적으로 실행하지 않으면 한 번 생성된 세션이 계속 메모리에 남아있고, 시간이 흐르면 이 세션 때문에 메모리 부족 현상이 발생함.
'JSP' 카테고리의 다른 글
| [JSP] MVC (Model, View, Controller) (0) | 2025.12.05 |
|---|---|
| [JSP] 쿠키 (0) | 2025.12.05 |
| [JSP] 필터 (1) | 2025.12.05 |
| [JSP] 예외처리 (0) | 2025.12.04 |
| [JSP] 시큐리티 (0) | 2025.12.04 |