반응형
들어가며
지난 번 삽질로그에서 배포 후 cookie를 넘겨주는 문제를 해결했었다.
그런데 이번에는 그렇게 넘겨준 cookie가 삭제되지 않는 문제가 발생했다.
소셜 로그인 시 redirect_uri 등등 잠시 사용할 목적의 쿠키를 저장해두었다가 로그인 완료 후 token 발급 시에 해당 쿠키를 삭제하는 방식으로 구현이 되어있어 최종적으로 refresh_token만 쿠키 안에 담겨있어야하는데 필요없는 쿠키들이 삭제되고있지 않았다.
오늘의 TIL은 이 문제에 대한 트러블 슈팅을 해보고자 한다.
배포 후, cookie가 삭제되지 않는 문제
기존의 cookie 삭제 로직은 다음과 같다
public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
cookie.setValue("");
cookie.setPath("/");
cookie.setMaxAge(0);
response.addHeader("Set-Cookie", deleteCookie.toString());
}
}
}
}
첫번째 시도 - 새로운 쿠키 객체를 생성해서 설정값을 바꾼 후 response에 넣어주기
기존 코드는 getCookies() 메소드로 가져온 객체의 설정값을 수정한 다음 response header에 넣어주는 방식이다.
구글링을 해본 결과 쿠키 삭제는 다음과 같이 하면 된다고 똑같이 말하기에 코드를 수정해보았다.
Cookie myCookie = new Cookie("기존 쿠키 이름", null);
myCookie.setMaxAge(0);
myCookie.setPath("/");
response.addCookie(myCookie);
수정한 로직
public static void deleteCookie(HttpServletRequest request, HttpServletResponse response, String name) {
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
Cookie deleteCookie = new Cookie(name, null);
deleteCookie.setValue("");
deleteCookie.setPath("/");
deleteCookie.setMaxAge(0);
response.addCookie(deleteCookie);
}
}
}
}
결과는 여전히 실패이다.
다시 구글링을 해보자
두번째 시도 - 삭제할 쿠키 옵션에 domain과 path도 넣어준다.
배포 후 쿠키가 넘어가지 않는 문제를 해결하기 위해 서브 도메인을 사용하고, 쿠키 설정에도 domain 값을 넣어줬었는데, 알고보니 쿠키를 삭제할 때에도 domain 값을 넣어줘야 한다고 한다.
그래서 다음과 같이 cookie 삭제 설정에 domain값을 추가해주었다.
public static void deleteCookie(HttpServletRequestrequest,HttpServletResponseresponse,Stringname) {
Cookie[] cookies =request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookiecookie : cookies) {
if (name.equals(cookie.getName())) {
ResponseCookiedeleteCookie = ResponseCookie.from(name, "")
.domain("bae-chelin.com")
.path("/")
.httpOnly(true)
.maxAge(0)
.build();
response.addHeader("Set-Cookie", deleteCookie.toString());
}
}
}
}
최종적으로 성공!
마치며
자꾸 쿠키를 다루다 보니까 어떤 글들은 쿠키를 생성한다고 하는 대신 쿠키를 굽는다라고 표현하고 있었다. 되게 귀여운 표현인거 같아서 앞으로 나도 쿠키를 생성하는게 아니라 구워보기로 했다.
반응형
'Study > TIL' 카테고리의 다른 글
[회고록] 08/04 항해99 88일차 - 실전프로젝트 "배슐랭" 회고 (0) | 2022.08.07 |
---|---|
[TIL] 07/25 항해99 78일차 - MySQL 검색기능 : FullText Search (0) | 2022.07.28 |
[TIL] 07/15 항해99 68일차 - 트러블 슈팅 : JWT 401에러 보내기 (0) | 2022.07.26 |
[TIL] 07/10 항해99 63일차 - postman에서 cookie 사용하기 (1) | 2022.07.25 |
[TIL] 07/07 항해99 60일차 - 트러블 슈팅 : 카카오 로그인에서 이메일이 넘어오지 않는 문제 (0) | 2022.07.25 |