쿠키의 함정

1308 단어 cookie

문제 개요
자동 로그인 기능을 사용하여 로그인할 때 쿠키를 지속합니다(암호화 없이 테스트만 가능).
 
final Cookie cookie = new Cookie("user", user.getId());
cookie.setMaxAge(5 * 60);
cookie.setPath("/");
inv.getResponse().addCookie(cookie);

 
로그아웃할 때 쿠키 삭제:
final Cookie c = new Cookie(cookie.getName(), null);
c.setMaxAge(0);
inv.getResponse().addCookie(c);

문제가 생겼습니다. 이 쿠키는 삭제되지 않았습니다. 즉, 취소는 전혀 작동하지 않습니다.
직접적 원인
삭제할 때 path를 설정하지 않았습니다. 기본 path는 현재 ui와 관련이 있습니다. 즉, 로그아웃한 ui가'xxxx/user/logout'이면 쿠키의 path를'xxx/user'로 설정합니다. 쿠키에 대해서name는 유일한 표식이 아니라domain과 path도 포함됩니다. 삭제할 때 표시되지 않은 지정한 path가'/'이기 때문입니다.
확장 읽기
Path 가시성
같은domain에서 현재 요청은 ui의 모든 부류uri의 쿠키만 읽을 수 있습니다. '읽을 수 있음' 은 어떤 개념입니까? servlet에서 리퀘스트에서 꺼낸 쿠키가 원하는 쿠키가 존재한다는 것입니다.예를 들어 path가 '/' 이면 모든domain 아래의 ui를 읽을 수 있고, path가 '/lib' 이면 '/lib/...' 아래의 ui만 읽을 수 있으며, path가 '/lib/user' 라면 ui가 '/lib' 인 요청을 Request에서 꺼낸 쿠키는 path가 '/lib/user' 인 쿠키를 포함하지 않습니다. 이것이 path의 가시적입니다.
쿠키에서 키/value만 꺼낼 수 있습니다
디버깅을 할 때 리퀘스트에서 꺼낸 쿠키는 키와value만 있고 다른domain과maxage 등 정보는 모두 잃어버린 것을 발견했습니다. 그 이유를 잘 모르고 기록을 했습니다. 높은 사람이 지나가면 지적을 해주면 더 이상 좋을 게 없습니다.

좋은 웹페이지 즐겨찾기