본문 바로가기
java

[java] 쿠키 생성, 삭제와 browser's cookie max size

by moonsiri 2021. 1. 8.
728x90
반응형

JAVA 쿠키 생성, 삭제 방법을 알아보기 전에 브라우저의 쿠키 사이즈 제한을 확인해봅시다.

 

cookies are usually limited to 4096 bytes and you can't store more than 20 cookies per site. By using a single cookie with subkeys, you use fewer of those 20 cookies that your site is allotted. In addition, a single cookie takes up about 50 characters for overhead (expiration information, and so on), plus the length of the value that you store in it, all of which counts toward the 4096-byte limit. If you store five subkeys instead of five separate cookies, you save the overhead of the separate cookies and can save around 200 bytes.

출처 : docs.microsoft.com/en-us/previous-versions/ms178194(v=vs.140)?redirectedfrom=MSDN

 

쿠키는 일반적으로 4kb로 제한되는데, 쿠키의 크기는 쿠키 값의 길이뿐만 아니라 만료 정보 등을 포함한 모든 쿠키의 총사이즈를 말합니다.

 

우선 쿠키 생성 방법을 알아보겠습니다.

쿠키 설정 값은 아래와 같습니다.

  • comment : 이 쿠키에 대한 목적을 설명
  • domain : 쿠키를 표현할 도메인 설정
  • httpOnly : true일 경우 쿠키의 범위를 HTTP 요청으로 제한
  • maxAge : 쿠키 유효 시간(초) 설정. 0일 경우 쿠키 제거
  • path : 쿠키 경로 지정
  • secure : 쿠키의 범위를 보안 채널로 제한하는 속성
  • value : 쿠키 값 설정
  • version : 이 쿠키가 준수하는 쿠키 프로토콜 버전 설정

 

HttpServletResponse 로 설정한 쿠키를 addCookie()로 추가하면 됩니다.

Cookie cookie = new Cookie(key, value);
cookie.setPath(path);
cookie.setMaxAge(maxAge);
response.addCookie(cookie);

 

쿠키 삭제는 maxAge를 0으로 설정하면 되는데, addCookie로 기존 쿠키를 만료시키는 구조입니다.

for (Cookie cookie : request.getCookies()) {
  if (key.equals(cookie.getName())) {
    cookie.setPath(path);
    cookie.setMaxAge(0);
    cookie.setDomain(domain);
    response.addCookie(cookie);
  }
}

 

쿠키의 최대 허용 사이즈가 4kb이기 때문에 4kb인 쿠키를 위 코드로 덮어 씌우게 되면 오류가 발생합니다.

그래서 기존 쿠키의 value를 null로 설정해야 해당 오류를 피할 수 있습니다.

for (Cookie cookie : request.getCookies()) {
  if (key.equals(cookie.getName())) {
    cookie.setValue(null);
    cookie.setPath(path);
    cookie.setMaxAge(0);
    cookie.setDomain(domain);
    response.addCookie(cookie);
  }
}

 

 

 

[Reference]

https://meetup.toast.com/posts/172

docs.oracle.com/javaee/6/api/javax/servlet/http/Cookie.html#setMaxAge%28int%29

 

728x90
반응형

댓글