⇒ 서버 측에 데이터를 보관하는 Session과 클라이언트 측에 데이터를 보관하는 Cookie이다.

클라이언트 측, 즉 사용자 컴퓨터에 데이터를 텍스트 파일 형태로 저장하는 기술로 필요 시에 저장한 정보를 서버와 공유하여 정보를 유지하는 것이다.
패키지 : javax.servlet.http.Cookie

서블릿에서 쿠키 정보를 설정해 주면, 쿠키를 클라이언트가 가지고 있으면서 다른 서블릿에 요청할 때 담아 보낸다.
데이터는 Map형식으로 저장되고 데이터의 크기, 개수에 제한이 있다.
Cookie 유지 시간, 유효 디렉토리, 유효 도메인 등을 설정할 수 있다.
⇒ 즉, 호출(조회)한 데이터를 클라이언트 PC에 가지고 있도록 하는 것으로 Cookie에 대한 보관 정보는 클라이언트가 주축이다.
Cookie는 간단하게 이용할 수 있다는 장점이 있으나, 공용PC를 사용하거나 url에 일부 데이터를 포함하는 경우 보안에 취약하다.
Cookie 객체를 생성한다.
Cookie *쿠키명* = new Cookie('*name*','*value*');
생성된 Cookie의 설정값을 지정한다.
| 메소드 | 내용 |
|---|---|
| setMaxAge(int expiry) | 유효 시간 설정 |
| setPath(String uri) | 경로 설정 (서버의 모든 요청이 아닌, 특정 경로를 통한 요청으로 Cookie를 사용하는 경우) |
| setDomain(String domain) | Cookie 도메인 설정 및 Cookie생성 (도메인 외의 도메인 설정 시 사용) |
응답 헤더에 쿠키를 담는다.
response.addCookie(Cookie cookie)
응답을 보낸다.
전달받은 Cookie 목록을 HttpServletRequest객체를 이용해 배열 형태로 읽어온다.
Cookie[] list = HttpRequest.getCookies();
Cookie의 getName()와 getValue()를 이용해 담긴 값을 호출한다.
for(Cookie c : list) {
System.out.println(c.getName());
System.out.println(c.getValue());
}
쿠키의 보안상 단점과 지원하지 않는 브라우저 문제 등으로 상태를 유지해야 하는 메커니즘에 적합하지 않은 경우(예: 회원 정보를 이용해서 해당 회원의 로그인 상태를 지속적으로 유지해야 하는 경우 등)가 다수 있다. 따라서 세션 인스턴스를 이용해서 상태를 유지하는 메커니즘을 제공한다.
서버에 데이터를 저장하는 기술로, 클라이언트에는 Session ID를 부여한다. 클라이언트가 요청 시 Session ID를 보내면 일치하는 Session정보를 컨테이너가 생성하여 그 객체의 데이터를 사용할 수 있다.
즉, 브라우저마다 제공하는 HashMap으로 서버에서 클라이언트에게 제공한다. Session에 값을 넣으면 모든 서블릿에서 해당 Session ID로 고유 공간을 찾아 값을 공유해 사용할 수 있다.

데이터를 서버에서 관리하므로 보안상 안전하고, 브라우저가 종료되면 세션도 함께 소멸한다.
만일 클라이언트가 보낸 Session ID가 없으면 새로 세션 객체를 생성한다.

HttpSession *SessionID* = HttpServletRequest.getSession();HttpRequest.getSession(boolean);*SessionID*.setAttribute('*이름*','*값(Obj)*'); //Session 데이터 설정
*SessionID*.setMaxInactiveInterval(*숫자*); //Session 유지시간 설정HttpSession *SessionID* = HttpServletRequest.getSession();
*SessionID*.getAttribute('*이름*'); // 데이터 호출setMaxInactiveInterval(int interval) 메소드를 통해 세션에 개별적으로 적용한 만료 시간
session.setMaxInactiveInterval(60 * 10); // 만료시간 10분 설정
각 웹 애플리케이션의 WEB-INF 디렉토리 하위의 web.xml (배포서술자) 파일을 통해 지정한 만료 시간
<session-config>
<session-timeout>60</session-timeout>
</session-config>
tomcat 설치 디렉터리 하위 conf 경로에 위치한 web.xml 파일을 통해 지정한 만료 시간
⇒ 톰캣의 conf 디렉터리에는 애플리케이션과 마찬가지로 web.xml 파일을 가지고 있고, 우선순위인 setMaxInactiveInterval() 메소드나 웹 애플리케이션의 web.xml에 설정하지 않으면 이곳에 설정된 값으로 적용된다.
<session-config>
<session-timeout>60</session-timeout>
</session-config>
session.removeAttribute(*"속성명"*);세션 자체를 무효화, 즉 강제 만료시키는 메소드이므로 실행 이후 세션을 이용하려고 하면 에러가 발생한다
session.invalidate();
| method명 | 내용 |
|---|---|
| setAttribute(String, object) | request객체에 전달하고 싶은 값을 String 이름-Object 값으로 설정 |
| getAttribute(String) | 매개변수와 동일한 객체의 속성 값 가져옴 |
| getAttributeNames() | 객체에 등록되어 있는 모든 속성의 이름만 반환 |
| removeAttribute(String) | request객체에 저장된 매개변수와 동일한 속성 값 삭제 |
| getId() | SessionID값 가져옴 |
| getCreationTime() | Session객체가 생성된 시간 반환 (msec) |
| getMaxInactiveInterval() | client 요청이 없을 때, 서버가 현재 Session을 언제까지 유지할지 초 단위로 반환(default = 30분) |
| getLastAccessedTime() | client 요청이 마지막으로 시도된 시간 반환 (msec) |
| isNew() | 새로 생성된 Session이면 true, 아니면 false 반환 |
| invalidate() | 현재 Session 삭제 |
| setMaxInactiveInterval(int) | 객체 유지 시간을 설정하고, 지정 시간 지나면 객체 자동 삭제 |