JSP 세션, 쿠키
상태정보 유지
상태 정보 유지 기술 쿠키(Cookie)는 상태 정보를 브라우저가 설치된 컴퓨터에 저장하는 기술이고, 세션(HttpSession)은 상태정보를 서버에 저장한다. 쿠키는 텍스트 형태의 상태정보만 저장할 수 있으며, 세션은 모든 타입의 데이터를 저장할 수 있다. 심지어 세션은 객체형태의 데이터도 저장할 수 있다. 쿠키는 저장할 수 있는 데이터의 개수와 크기에 제한이 있지만 세션은 서버의 메모리가 허용하는 범위 내에서 얼마든지 저장할 수 있다. 쿠키 정보는 HTTP 응답이 브라우저에 전송될 때, message-header에 포함된다. 쿠키를 설정할 때는 도메인과 패스, 그리고 쿠키의 유효 시간 등을 설정할 수 있다. 이때 다음의 메소드를 사용한다. void setDomain(String domain) 쿠키 도메인 설정 void setPath(String uri) 쿠키 패스 설정 void setMaxAge(int expiry) 쿠키 유효시간 설정
세션의 동작 원리 ① HTTP 요청 프로토콜 message-header에 포함된 쿠키 정보를 추출한다. ② 추출된 쿠키 목록에 해당 서버에서 전송한 세션 ID가 있는지 확인한다. ③ 만약 세션 ID가 존재하지 않는다면 새로운 세션 객체를 생성한다. ④ 세션 객체가 생성되는 순간 동시에 생성되는 세션 ID를 이용하여 쿠키 객체를 생성한다. ⑤ 쿠키를 HTTP 응답 프로토콜에 설정하여 브라우저에 전송한다. HttpSession 메소드 void setAttribute(String name, Object value) 세션에 name-value 쌍의 데이터를 저장한다. Object getAttribute(String name) 세션에 저장된 데이터를 리턴한다. Enumeration getAttributeNames() 세션에 저장된 데이터의 name 목록을 Enumeration 타입으로 리턴한다. void removeAttribute(String name) 세션에 저장된 데이터를 삭제한다. String getId() 생성된 세션 객체의 세션 ID를 리턴한다. boolean isNew() 처음 생성된 세션인지를 리턴한다. long getCreationTime() 세션이 생성된 시간을 리턴한다. long getLastAccessTime() 마지막으로 세션이 사용된 시간을 리턴한다. void setMaxInactiveInterval(int second) 브라우저가 서버에 아무런 요청을 하지 않을 때, 얼마까지 세션을 유지할 것인지를 설정한다. (기본 30분) int getMaxInactiveInterval() 설정된 세션의 유효시간을 리턴한다. void invalidate() 브라우저와 매핑된 세션을 강제로 종료한다.