이름과 값의 쌍으로 구성된 정보. 아스키 문자만 가능, 한글은 URL 인코딩 해야 함.

쿠키는 브라우저에 저장되고, 유효기간 이후에 자동으로 삭제된다.
서버 요청시, domain, path가 일치하는 경우에만 자동으로 전송된다.
로그인할 때, 브라우저가 아이디를 기억하게 하고 싶은 경우를 생각해보자.

사용자는 서버에 request를 보내면, 서버에서 쿠키를 생성해서 response에 전달한다.

그러고 나면 이후부터는 쿠키가 따라다닌다.

Cookie cookie = new Cookie("id",id); // 쿠키 생성
cookie.setMaxAge(60*60*24); // 유효기간 설정(초)
response.addCookie(cookie); // 응답에 쿠키 추가

Cookie cookie = new Cookie("id",""); // 변경할 쿠키와 같은 이름의 쿠키 생성
cook.setMaxAge(0); // 유효기간 0으로 설정
response.addCookie(cookie) // 응답에 쿠키 추가
쿠키를 이용하여 서로 관련된 요청들을 하나로 묶은 것
browser마다 개별 저장소(session객체)를 서버에서 제공
서버에 저장되기 때문에, 쿠키보다 안전하지만, 서버에 부담이 있다.
서버는 클라이언트에게 독립적인 세션 ID를 발급. 사용자마다 고유의 세션을 가진다.
클라이언트는 세션 ID를 쿠키에 같이 전달하여 요청을 하고, 서버는 세션 ID에 해당하는 정보를 처리해준다.

1. 수동 종료
HttpSession session = request.getSession();
session.invalidate(); // 1. 세션을 즉시 종료
session.setMaxInactiveInterval(30*60); // 2. 예약 종료(30분 후)
2. 자동 종료 – web.xml
<session-config>
<session-timeout>30</session-timeout>
</session-config>
HTTP 프로토콜은 Stateless(서버는 클라이언트 상태 저장 x), Connectionless(서버가 요청에 응답하고나면 연결을 끊음) 하기 때문에, 서버는 클라이언트를 구분,기억할 수 없기 때문.
사용자의 정보가 저장되는 위치(쿠키 : 클라이언트, 세션: 서버).
-> 보안 면에서 세션이 우수, 요청 속도는 쿠키가 우수
->세션은 서버 메모리를 사용하기 때문에, 트래픽이 몰릴 경우, 서버의 성능이 저하될 수 있음.