- cookie 설정을 어려워 생각할 필요가 없다.
- cookie 객체를 생성하고 이름, 값, 만료기한만 넣으면 된다.
너무 어렵게 생각해서 하루만에 끝날 걸 3일이나 끌고 갔다.
- jsp나 php같은 곳이 아닌, spring은 cookie는 interceptor에서만 적용된다.
그래서 interceptor가 아닌 service나 다른곳에서 로직을 작성해도 적용되지 않는다.- 그리고 jsp에서는 cookie 객체를 통해 생성되지만, spring의 로직에서는 CookieGenerator를 사용해야 한다.
- 생성
CookieGenerator cg = new CookieGenerator(); cg.setCookieName("view"); cg.setCookieMaxAge(60*60*24); cg.addCookie(response, "value");
- 객체 생성 후 .set을 입력하면
![]()
- 유효기간, 도메인, 이름, 접속경로, 보안, HttpOnly 설정이 있다.
- MaxAge : (현재 시간 기준) 쿠키를 유지할 만료기한
- Domain : 쿠키가 어떤 서버로 전송 되어야하는 지 설정
- Name : 쿠키의 key값으로 사용될 이름
- Path : 웹서버의 특정 URL에 대해서만 쿠키를 전송 가능
- Secure : 웹브라우저와 웹서버가 HTTPS로 통신하는 경우에만 웹브라우저가 쿠키를 서버로 전송하는 옵션
- HttpOnly : 자바스크립트 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션. 쿠키 조작 방지
- 쿠키 값 가져와서 해당 값 수정 & 삭제
//쿠키값 가져오기 Cookie[] cookies = request.getCookies(); // 쿠키값 중에서 원하는 쿠키로 설정 for(Cookie cookie : cookies) { // 찾는 쿠키 발견시 수정 if(cookie.getName().equals("name")) { // 쿠키 설정하는 것과 같이 원하는 값을 넣으면 변경! cg.setCookieName("name2"); // cookie 이름 cg.setCookieMaxAge(0); // cookie 즉시종료 cg.addCookie(response, null); // cookie 값 null } }
- MaxAge
- -1 : 세션이 끝나면 삭제 즉, 브라우저 종료 시 쿠키 삭제 (session)
- 0 : 즉시 종료
- 초 단위 : (초 * 분 * 시 * 일 )
- 60 * 60 * 24 : 24시간
- 60 * 60 * 10 : 10 시간
- 60 * 60 *24 * 30 : 한 달
- 60 * 60 *24 * 365 : 일년
- 만약 CookieGenerator를 사용해서 만드는게 아니라 Cookie를 사용하여 수정할 때는, value의 값을 setValue(null)로 만든 후 setValue("수정값")으로 넣어야한다.
왜냐하면 기존의 value는 4byte의 값인데 다른 값으로 변경하면 겹쳐서 값이 들어가기 때문에 중복으로 오류가 날 수도 있다. 그래서 먼저 null로 만든 후 값을 넣어줘야한다.