1. HTTP Session
- HTTP 세션은 웹 애플리케이션에서 사용자의 상태 정보를 유지하기 위해 사용된다.
- HTTP 프로토콜은 기본적으로 상태를 유지하지 않는 Stateless 프로토콜이므로, 웹 서버는 각 요청을 독립적으로 처리한다.
- 하지만, 많은 웹 애플리케이션에서는 사용자의 로그인 상태, 장바구니 내역 등 사용자별로 이와 같은 정보를 유지해야 한다.
- 이를 위해 세션을 사용하면 상태 정보를 보관하고 관리할 수 있다.
Session | |
---|---|
Type | javax.servlet. |
저장 위치 | Server의 mermory에 Object로 저장 |
저장 형식 | Object는 모두 가능(일반적으로 DTO, List등 저장) |
사용 예 | 로그인시 사용자 정보, 장바구니 등 |
용량제한 | 제한 없음 |
만료시점 | 알 수 없음 (클라이언트가 로그아웃 하거나, 이정 시간동안 세션에 접근하지 않을 경우 -> 만료 시간은 web.xml 에 설정) |
특징 | 전역에 저장하기 때문에 프로젝트 내의 모든 JSP에서 사용 가능 |
Map 형식으로 관리하기 때문에 key 값의 중복을 허용하지 않는다. |
2. HTTP Session 동작원리
1. 클라이언트가 웹 서버에 접속하면, 세션 ID가 클라이언트에게 할당된다.
- 세션 ID는 일반적으로 쿠키를 사용해 클라이언트에 저장된다.
2. 클라이언트가 서버에 요청을 보낼 때마다, 클라이언트의 세션 ID가 요청과 함께 서버로 전송된다.
- 이를 통해, 서버는 클라이언트를 식별하고 해당 섹션에 연결된 상태 정보를 찾을 수 있다.
3. 서버는 세션 ID를 사용하여 세션 저장소에 저장된 상태 정보에 접근한다.
- 세션 저장소는 일반적으로 서버의 메모리나 데이터베이스에 위치할 수 있다.
4. 서버는 세션에 필요한 작업을 수행한 후, 응답을 클라이언트에게 반환한다.
- 응답에는 변경된 세션 정보가 포함될 수 있다.
3. HTTP Session 관리 작업
1. 세션 생성
- 클라이언트가 서버에 처음 접속할 때, 새로운 세션을 생성하고 세션 ID를 클라이언트에게 전달한다.
2. 세션 검증
- 클라이언트의 요청에 포함된 세션 ID를 검증하여 유효한 세션인지 확인한다.
- 유효하지 않은 세션은 거부될 수 있다.
3. 세션 저장
- 세션에 연결된 상태 정보를 저장하고 관리한다.
- 이 정보는 필요에 따라 세션 저장소에 저장된다.
4. 세션 만료
- 세션은 일정 기간동안 유지될 수 있으며, 만료 시간이 지나면 자동으로 삭제된다.
- 이를 통해 서버 리소스를 효율적으로 관리할 수 있다.
4. 주요 기능
// 생성
HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
// 값 저장
session.setAttribute(String name, Object value);
// 값 얻기
Object obj = session.getAttribute(String name);
// 값 제거
session.removeAttribute(String name); // 특정 이름의 속성 제거
session.invalidate(); // binding 되어 있는 모든 속성 제거
1) 데이터 저장하기
.setAttribute(String name, Object Value)
2) 데이터 가져오기
.getAttribute(String name)
@SessionAttribute(String name)
3) 데이터 제거하기
- 특정 세션만 제거
.removeAttribute(String name)
- 모든 세션에 데이터 제거
invalidate()