프로젝트 과정 중 JWT 토큰과 리프레쉬 토큰을 쿠키로 보내기 위해 설정을 하였다.
// 쿠키 생성
public void setCookie(String name, String value) {
ResponseCookie cookie = ResponseCookie.from(name, value)
.path("/")
.domain("localhost")
.httpOnly(true)
.build();
resp.addHeader("Set-Cookie", cookie.toString());
}
(secure 등의 설정은 브라우저 별 정책 및 http로 사용하지 않았다.)
그리고 이후 최근 소셜 로그인 한 방법을 알려주기 위해 쿠키를 추가했다.
그런데 문제가 브라우저를 종료하면 함께 삭제된다는 것이었다.
알아보니 쿠키의 수명을 설정하지 않으면 "세션 쿠키"로 저장이 된다.
이 쿠키들은 세션이 종료되면, 브라우저가 꺼지면 함께 삭제된다.
브라우저가 종료되어도 쿠키가 유지되기 위해서는 (영속 쿠키)
쿠키의 기간을 설정해주어야 한다.
public void setLongCookie(String name, String value) {
ResponseCookie cookie = ResponseCookie.from(name, value)
.path("/")
.domain("localhost")
.httpOnly(true)
.maxAge(31536000) // 1년
.build();
resp.addHeader("Set-Cookie", cookie.toString());
}
얼마가 좋을지는 몰라서 일단 1년으로 설정해주었다.
이제 쿠키를 통해 1년 안에 다시 접속한다면
마지막으로 로그인했던 소셜 방식을 알 수 있게 되었다.
| 세션 쿠키 | 영속 쿠키 | |
|---|---|---|
| 브라우저 종료 시 | 삭제됨 | 유지됨 |
| 설정 방법 | 수명 미설정 | 수명 설정 |
| 사용되는 곳 | 보안이 중요한 정보, 로그인 세션 관리, CSRF 방지 토큰 등 | 자동 로그인, 사용자 설정 (예: 다크모드), 장바구니 등 |