브라우저 쪽에 저장됨
「쿠키」 라는 단어는 들어봤지만 — 실제로 어디 저장되어 있는지, 어떤 모양인지 본 적이 없습니다.
F12 로 직접 확인합니다.
서버가 발급한 텍스트 한 줄(이름=값)이 브라우저 안에 저장. 이후 모든 요청에 자동으로 함께 보내짐.
| 필드 | 의미 |
|---|---|
| Name | 쿠키 이름 (key) |
| Value | 저장된 값 |
| Domain | 이 쿠키가 유효한 도메인 |
| Path | 이 쿠키가 유효한 경로 |
| Expires | 만료 시간 |
| HttpOnly | JS 접근 불가 표시 |
| Secure | HTTPS 전용 |
| SameSite | 크로스 도메인 정책 |
@GetMapping("/setcookie")
public String setCookie(HttpServletResponse resp) {
Cookie c = new Cookie("theme", "dark");
c.setMaxAge(60 * 60 * 24); // 24 시간
c.setPath("/"); // 사이트 전체에서 유효
c.setHttpOnly(true); // JS 접근 차단
resp.addCookie(c);
return "redirect:/";
}
👉 응답 헤더에 Set-Cookie: theme=dark; Max-Age=86400; Path=/; HttpOnly 추가됨.
// 방법 ① @CookieValue
@GetMapping("/main")
public String main(@CookieValue(value="theme", defaultValue="light") String theme,
Model model) {
model.addAttribute("theme", theme);
return "main";
}
// 방법 ② HttpServletRequest 직접
@GetMapping("/main")
public String main(HttpServletRequest req) {
Cookie[] cookies = req.getCookies();
for (Cookie c : cookies) {
if ("theme".equals(c.getName())) {
String theme = c.getValue();
}
}
return "main";
}
| 옵션 | 의미 | 왜 필요 |
|---|---|---|
| HttpOnly | JS document.cookie 접근 차단 | XSS 방어 |
| Secure | HTTPS 에서만 전송 | 중간자 공격 방어 |
| SameSite | 크로스 도메인 요청 시 제한 | CSRF 방어 |
| Domain | 유효 도메인 한정 | 의도치 않은 공유 방지 |
| MaxAge | 유효 시간 (초) | 오래된 쿠키 자동 삭제 |
Cookie c = new Cookie("theme", "");
c.setMaxAge(0); // 즉시 만료
c.setPath("/");
resp.addCookie(c);
👉 「삭제」 = 「MaxAge 를 0 으로 하는 같은 이름의 쿠키 발급」.
document.cookie 입력 → JS 가 볼 수 있는 쿠키 출력쿠키라는 개념만 안다.
F12 로 쿠키를 직접 보고 만질 수 있다. 발급·읽기·옵션을 안다.