이름과 값의 쌍으로 구성된 정보이며, 아스키 문자만 가능
서버에서 생성 후에 응답 헤더에 담아서 전송, 브라우저에 저장, 유효기간 이후 자동 삭제
클라이언트에서 서버에 요청한 domain, path가 일치하는 경우에만 저장된 쿠키를 요청 헤더에 담아서 서버에 자동 전송
Cookie cookie = new Cookie("id", "Kevin"); // 쿠키 생성
cookie.setMaxAge(60*60*24); // 유효기간 설정(초)
cookie.setDomain("localhost"); // 쿠키의 도메인 설정
cookie.setPath("/"); // 쿠키의 주소를 설정
response.addCookie(cookie); // 응답에 쿠키 추가
Cookie("id", "Kevin")
← “id”는 key, “Kevin”는 value이다.디폴트 값으로 쿠키를 생성한 곳
에서만 쿠키를 읽을 수 있게 되어있음.@RequestMapping("/createCookie")
public String createCookie(HttpServletResponse response) {
Cookie cookie = new Cookie("useremail","blueskii");
cookie.setDomain("localhost");
cookie.setPath("/");
// 30초간 저장
cookie.setMaxAge(30*60);
cookie.setSecure(true);
response.addCookie(cookie);
return "redirect:/ch05/content";
}
"""
쿠키 삭제
"""
Cookie cookie = new Cookie("id", "Kevin"); // 삭제할 쿠키와 같은 이름의 쿠키 생성
cookie.setMaxAge(0); // 유효기간을 0으로 설정(삭제)
response.addCookie(cookie); // 응답에 쿠키 추가
"""
쿠키 변경
"""
Cookie cookie = new Cookie("id", "Kevin"); // 변경할 쿠키와 같은 이름의 쿠키 생성
cookie.setValue(); // setter로 변경할 값 넣어주기
cookie.setDomain();
cookie.setPath();
cookie.setMaxAge();
response.addCookie(cookie); // 응답에 쿠키 추가
어노테이션으로 가져오는 방법
@RequestMapping("/getCookie1")
public String getCookie1(@CookieValue String useremail, @CookieValue("useremail") String umail) {
logger.info("실행");
logger.info(umail);
return "redirect:/ch05/content";
}
httpServletRequest 객체로 가져오는 방법
@RequestMapping("/getCookie2")
public String getCookie2(HttpServletRequest request) {
Cookie[] list = request.getCookies();
for(Cookie cookie:list) {
if(cookie.getName().equals("useremail")) {
logger.info(cookie.getValue());
}
}
return "redirect:/ch05/content";
}
"""
쿠키 읽어오기
"""
Cookie[] cookies = request.getCookies();
for(Cookie cookie : cookies) {
String name = cookie.getName();
String value = cookie.getValue();
}
<br />
@PostMapping("/login")
public String login(String id, String pwd, boolean rememberId, HttpServletResponse response) throws Exception {
System.out.println("id="+id);
System.out.println("pwd="+pwd);
System.out.println("rememberId="+rememberId);
// 1. id와 pwd를 확인
if(!loginCheck(id, pwd)) {
// 2-1 일치하지 않으면, loginForm으로 이동
String msg = URLEncoder.encode("id 또는 pwd가 일치하지 않습니다.", "utf-8");
return "redirect:/login/login?msg="+msg;
}
// 2-2. id와 pwd가 일치하면,
if(rememberId) {
// 1. 쿠키를 생성
Cookie cookie = new Cookie("id", id); // ctrl+shift+o 자동 import
// 2. 응답에 저장
response.addCookie(cookie);
} else {
// 1. 쿠키를 삭제
Cookie cookie = new Cookie("id", id); // ctrl+shift+o 자동 import
cookie.setMaxAge(0); // 쿠키를 삭제
// 2. 응답에 저장
response.addCookie(cookie);
}
// 3. 홈으로 이동
return "redirect:/";
}
private boolean loginCheck(String id, String pwd) {
return "asdf".equals(id) && "1234".equals(pwd);
}
}
쿠키의 문제점