쿠키란?
- 이름과 값의 쌍들으로 구성된 작은 정보
- 아스키 문자만 가능(한글은 URL인코딩해야)
- 서버에서 생성 후 전송, 브라우저에 저장. 유효기간 후 자동삭제
- 서버에 요청시 domain, path가 일치(하면 그 하위 경로까지 쿠키가 간다)하는 경우에만 자동 전송
- 클라이언트 식별기술 +도서관 갈 때는 도서관 ID카드 가지고 가자
쿠키의 작동 과정
- 첫 요청
- 서버에서 쿠키 생성 후, 응답 헤더(set-Cookie)에 쿠키를 담아 전송
- 브라우저에 저장
- 브라우저가 쿠키에 저장된 domain, path가 일치하는 서버에 요청 시 쿠키가 자동으로 따라간다
쿠키의 생성
Cookie cookie = new Cookie("id", "asdf"); //쿠키 생성
cookie.setMaxAge(60*60*24); //유효기간 설정(초)
response.addCookie(cookie); //응답에 쿠키 추가
- 유효기간은 상대 시간(Max-age)과 절대 시간(Expires)이 같이 간다 브라우저마다 사용하는 시간이 다르고, 시차에 따른 오차나 하드웨어 시간에 오차가 있을 수 있기 때문
쿠키의 삭제, 변경, 읽기
1. 삭제
Cookie cookie = new Cookie("id", "");
//변경할 쿠키와 '같은 이름'의 쿠키 생성
cookie. setMaxAge(0); //유효기간을 0으로 설정(삭제)
response.addCookie(cookie); //응답에 쿠키 추가
2. 변경
Cookie cookie = new Cookie("id",""); //변경할 쿠키와 같은 이름의 쿠키 생성
cookie.setValue(URLEncoder.encode("남궁성"); //쿠키 값 변경
cookie.setDomain("www.fastcampus.co.kr"); //쿠키 domain변경
cookie.setPath("/ch2"); //쿠키 path변경
//domain과 path의 기본값은 서버의 응답을 가지고 판단
cookie.setMaxAge(60*60*24*7); //쿠키 유효기간 변경
response.addCookie(cookie); //응답에 쿠키 보내기
3. 쿠키 읽어오기
Cookie[] cookies = request.getCookies(); //없으면 null -> null check!
for(Cookie cookie:cookies){
String name = cookie.getName();
String value = cookie.getValue();
System.out.printf("[cookie]name=%s, value=%s%n", name, value);
}
//요청을 통해 들어온 쿠키를 파라미터에 넣어줄 수도 있다
@PostMapping("/login/login")
public String login(@CookieValue("JSESSIONID") String sessionid, String id){
...
}