양쪽 이전 판 이전 판 다음 판 | 이전 판 |
http_cookie와_톰캣_버전별_이슈 [2019/06/12 06:22] – [RFC 6265, RFC 2109의 쿠키 차이.] koov | http_cookie와_톰캣_버전별_이슈 [2020/11/27 11:36] (현재) – koov |
---|
==== 쿠키의 목적 ==== | ==== 쿠키의 목적 ==== |
=== 세션 관리 (로그인) === | === 세션 관리 (로그인) === |
* 쿠키는 웹사이트의 장바구니 기능 때문에 도입되었습니다.[[https://en.wikipedia.org/wiki/HTTP_cookie#History|1]][[http://web.archive.org/web/20020803110822/http://wp.netscape.com/newsref/std/cookie_spec.html|2]] (요즘에는 서버 DB에 저장합니다.) | * 쿠키는 웹사이트의 장바구니 기능 때문에 도입되었습니다. [[https://en.wikipedia.org/wiki/HTTP_cookie#History|1]][[http://web.archive.org/web/20020803110822/http://wp.netscape.com/newsref/std/cookie_spec.html|2]] (요즘에는 서버 DB에 저장합니다.) |
* 쿠키에 UID(고유식별자)를 넣어 사용자가 새 페이지를 방문해도 장바구니를 보여줄 수 있습니다.\ | * 쿠키에 UID(고유식별자)를 넣어 사용자가 새 페이지를 방문해도 장바구니를 보여줄 수 있습니다. |
* 이를 이용해 로그인 페이지를 방문하면 사용자에게 UID가 포함된 쿠키를 생성하고 사용자에게 서비스를 제공합니다{{ :was:tomcat:1.png |}}↓ 로그인 후{{ :was:tomcat:2.png |}} | * 이를 이용해 로그인 페이지를 방문하면 사용자에게 UID가 포함된 쿠키를 생성하고 사용자에게 서비스를 제공합니다 |
| |
| {{:was:tomcat:1.png}} |
| |
| ↓ 로그인 후 |
| |
| {{:was:tomcat:2.png}} |
| |
=== 개인화 (검색 결과 설정, 테마 등) === | === 개인화 (검색 결과 설정, 테마 등) === |
* 사용자에게 컨텐츠를 보여주기 위한 정보를 기억하기 위해 사용될 수 있습니다. | * 사용자에게 컨텐츠를 보여주기 위한 정보를 기억하기 위해 사용될 수 있습니다. |
* 예를 들면 ''구글 검색 결과를 몇 개씩 보여줄 건가'', ''duckduckgo 사이트의 사용자 테마''와 같은 설정 등이 있습니다.{{ :was:tomcat:3.png |}} | * 예를 들면 ''구글 검색 결과를 몇 개씩 보여줄 건가'', ''duckduckgo 사이트의 사용자 테마''와 같은 설정 등이 있습니다. |
| |
| {{:was:tomcat:3.png}} |
| |
=== 트래킹 (사용자 행동) === | === 트래킹 (사용자 행동) === |
* ''Expires''는 ''Date'' 값을 가지고 있으며 이 날짜가 지나면 쿠키를 버리고, ''HttpOnly''는 비HTTP 요청을 막습니다. (클라이언트가 API로 접근하는 행위 등) | * ''Expires''는 ''Date'' 값을 가지고 있으며 이 날짜가 지나면 쿠키를 버리고, ''HttpOnly''는 비HTTP 요청을 막습니다. (클라이언트가 API로 접근하는 행위 등) |
* 구현 시 고려 사항에 관한 점 또한 변경되었습니다. | * 구현 시 고려 사항에 관한 점 또한 변경되었습니다. |
* ''RFC 2109''는 유저 에이전트가 ''최소 300개''의 쿠키, 쿠키마다 적어도 ''4096바이트'', ''한 호스트나 도메인'' 마다 최소 ''20개''를 지원해야 한다고 명시했습니다. {{:was:tomcat:5.png|}} | * ''RFC 2109''는 유저 에이전트가 ''최소 300개''의 쿠키, 쿠키마다 적어도 ''4096바이트'', ''한 호스트나 도메인'' 마다 최소 ''20개''를 지원해야 한다고 명시했습니다. |
* ''RFC 6265''는 유저 에이전트가 ''최소 3000개''의 쿠키, 쿠키마다 적어도 ''4096바이트'', ''도메인당 최소 50개''의 쿠키를 저장 가능해야 한다고 명시했습니다. {{:was:tomcat:6.png|}} | {{:was:tomcat:5.png}} |
| * ''RFC 6265''는 유저 에이전트가 ''최소 3000개''의 쿠키, 쿠키마다 적어도 ''4096바이트'', ''도메인당 최소 50개''의 쿠키를 저장 가능해야 한다고 명시했습니다. |
| {{:was:tomcat:6.png}} |
* 또한 ''RFC 6265''는 속성이름과 세미콜론 사이에 공백이 필요하고 특수 문자가 있는 경우를 제외하면 속성 값을 ''""''로 감싸지 않습니다. | * 또한 ''RFC 6265''는 속성이름과 세미콜론 사이에 공백이 필요하고 특수 문자가 있는 경우를 제외하면 속성 값을 ''""''로 감싸지 않습니다. |
* ''RFC 6265''는 유저 에이전트가 ''Set-Cookie'' 헤더를 어떻게 처리해야 하는지 알고리즘을 제공합니다. | * ''RFC 6265''는 유저 에이전트가 ''Set-Cookie'' 헤더를 어떻게 처리해야 하는지 알고리즘을 제공합니다. |
| |
* maxAge를 정하면 자동으로 Expires가 정해집니다. | * maxAge를 정하면 자동으로 Expires가 정해집니다. |
* {{:was:tomcat:7.png|}} | {{:was:tomcat:7.png}} |
| |
===== 톰캣 6.0~8.5 버전별 쿠키 이슈. ===== | ===== 톰캣 6.0~8.5 버전별 쿠키 이슈. ===== |
* https://bz.apache.org/bugzilla/show_bug.cgi?id=57896 | * https://bz.apache.org/bugzilla/show_bug.cgi?id=57896 |
* 재현 방법 | * 재현 방법 |
* 스크린샷같이 쿠키를 생성합니다.{{ :was:tomcat:8.png |}} | * 스크린샷같이 쿠키를 생성합니다. |
* 페이지를 재방문하면 헤더 값이 손상됩니다.{{ :was:tomcat:9.png |}} | {{:was:tomcat:8.png}} |
| * 페이지를 재방문하면 헤더 값이 손상됩니다. |
| {{:was:tomcat:9.png}} |
* 해결 방법 | * 해결 방법 |
* 6.0.45로 업데이트합니다. | * 6.0.45로 업데이트합니다. |
makeCookie(response, "CookieName6", "[Bracket]"); | makeCookie(response, "CookieName6", "[Bracket]"); |
</code> | </code> |
</WRAP>↓ 결과{{ :was:tomcat:22.png |}} | </WRAP> |
* Tomcat 7 이상{{ :was:tomcat:23.png |}} | |
| ↓ 결과 |
| |
| {{:was:tomcat:22.png}} |
| |
| * Tomcat 7 이상 |
| {{:was:tomcat:23.png}} |
* 해결 방법 | * 해결 방법 |
* URLEncoder.encode를 사용하여 저장합니다. (값을 읽을 때 Decoding이 필요합니다.){{ :was:tomcat:24.png |}} | * URLEncoder.encode를 사용하여 저장합니다. (값을 읽을 때 Decoding이 필요합니다.) |
| {{:was:tomcat:24.png}} |
| |
===== 출처 ===== | ===== 출처 ===== |