서로 관련된 요청들을 하나로 묶은 것 - 쿠키를 이용
browser마다 개별 저장소(session객체)를 서버에서 제공(1:1)
(쿠키: 브라우저에 저장, 세션: 서버에 저장)
브라우저가 요청을 하면 서버가 무조건 세션 객체(저장소)를 만듬
세션 id가 담긴 쿠키를 생성해서 브라우저로 보내고 브라우저에 쿠키가 저장.
브라우저에서 요청을 보낼 때 세션id(JESSIONID)가 담긴 쿠키를 같이 보냄.
서버는 JSSESIONID로 확인.
(같은 PC라도 다른 브라우저라면 다른 SESSION ID를 보냄)
HttpSession session = request.getSession();
session.setAttribute("id","asdf");
String getId() //세션의 ID를 반환
long getLastAccessedTime() //세션 내에서 최근 요청을 받은 시간을 반환
boolean isNew() //새로 생성된 세션인지를 반환. request.getSession()호출 후 사용
void invalidate() //세션 객체를 제거(저장된 객체도 함께)(즉시 종료)
void setMaxInactiveInterval(int interval) //지정된 시간(초)후에 세션을 종료(예약 종료)
int getMaxInactiveInterval() //예약된 세션 종료 시간을 반환
void setAttribute(String name, Object value) //지정된 값(value)을 지정된 속성 이름(name)으로 저장
Object getAttribute(String name) //지정된 이름(name)으로 저장된 속성의 값을 반환
void removeAttribute(String name) //지정된 이름(name)의 속성을 삭제
Enumeration getAttributeNames() //기본 객체에 저장된 모든 속성의 이름을 반환
HttpSession session = request.getSession();
session.invalidate(); //1. 세션을 즉시 종료
session.setMaxInactiveInterval(30*60); //2. 예약 종료(30분 후)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
쿠키 : 브라우저에 저장, 서버부담X, 보안에 불리, 서버 다중화에 유리
세션(HttpSession) : 서버에 저장, 서버부담O, 보안에 유리, 서버 다중화에 불리
브라우저가 쿠키를 저장하지 않는다 설정을 하면, GET으로 세션 아이디를 URL뒤에 붙여서 보내야 함.