cookie 지원 - xrath.com 에서 번역됨

# cookie 지원

cookie 지원에는 다음의 내용이 포함됩니다.

- 처음에
- Java Plug-in 와 Java Web Start 에서의 cookie 지원
- 프로그램에 의한 cookie 에의 액세스
- 상세 정보

## 처음에

cookie 는, 클라이언트 측에 데이터를 포함하는 1 개의 방법입니다. cookie 는, 개인에게 특화한 포털 사이트 작성, 사용자 설정의 추적, 및 Web 사이트로의 로그인으로 광범위하게 사용됩니다. Web 사이트에서 cookie 를 사용하고 있는 기업 고객의 경우, Java Plug-in 및 Java Web Start 로 cookie 가 지원되고 있으면(자), 클라이언트측의 Java 의 배치가 용이하게 됩니다.

cookie 지원를 이용하면(자), Web 서버로부터의 cookie 를, Java 어플리케이션으로부터 해당 Web 서버에 돌려줄 수가 있습니다. 이것에 의해, 클라이언트 상태에 관한 정보를 서버에 제공할 수 있습니다.

## Java Plug-in 와 Java Web Start 에서의 cookie 지원

cookie 에는, 주로세션 cookie 및지속 cookie 의 2 종류가 있습니다.

### 세션 cookie

세션 cookie 는 애플릿 또는 어플리케이션의 세션의 사이에 메모리에 포함됩니다. 세션 cookie 는 애플릿 또는 어플리케이션이 종료했을 때에 기한 마감이 되어, 자동적으로 삭제됩니다. 일반적으로, 이러한 cookie 는, 사용자 개인을 특정하지 않는 세션 ID 를 포함하는 것으로써, 사용자가 페이지로부터 페이지로 이동할 때, 반복 로그인할 필요가 없어집니다. 세션 cookie 는, 예를 들어 소비자가 쇼핑이나 에 추가한 상품을 추적하기 위해서, 상용 Web 사이트에 있어 넓게 사용되고 있습니다.

### 지속 cookie

지속 cookie 는 지속적인 기억 영역에 보관되어 어플리케이션이 종료해도 삭제되지 않습니다. 지속 cookie 는 기한 마감이 되었을 경우에 삭제됩니다. 지속 cookie 는 특정의 Web 사이트에 대한 사용자 설정을 유지하는 것으로, 장래의 세션으로 그러한 설정을 사용할 수가 있습니다. 지속 cookie 는, 개별의 사용자를 식별하기 위해서 사용되므로, Web 사이트에 있어 사용자가, 어떻게 넷 서핑을 하고 있는지를 분석하기 위해서(때문에) 사용됩니다. 이러한 cookie 는 방문자의 인원수, 특정의 페이지를 열람하기 위해서 소비된 시간의 평균, Web 사이트의 전반적인 퍼포먼스등의 정보를 제공하기 위해서도 사용됩니다. 이러한 cookie 는 일반적으로, 장기간, 경우에 따라서는 몇 년간, 사용자를 추적하도록(듯이) 설정됩니다.

### 테크니컬 지원

Java Plug-in 및 Java Web Start 는 양쪽 모두의 종류의 cookie 를 모든 플랫폼상에서 취급할 수 있도록(듯이) 지원합니다.

Java Plug-in 는, 브라우저 자체의 cookie 스토어를 사용해 지속적인 cookie 지원를 제공합니다. Internet Explorer 로 실행하면(자), IE 의 cookie 스토어가 사용되어 Mozilla 로 실행하면(자), Mozilla 의 cookie 스토어가 사용됩니다. 각각의 브라우저가 다른 cookie 의 정책를 가지기 위해서(때문에), cookie 를 취급할 때의 동작은 브라우저의 cookie 제어에 의존합니다. 예를 들어, 브라우저가 서드 파티의 cookie 를 거부하도록(듯이) 설정되어 있는 경우, 이 브라우저로 Java Plug-in 를 실행할 경우에는, 그 정책가 적용됩니다.

Java Web Start 는, Internet Explorer 의 cookie 스토어를 사용하는 것으로써, Windows 상에서 지속 cookie 의 지원를 제공해, cookie 를 취급할 때의 동작은 IE 의 cookie 제어에 의해 결정됩니다. Linux/Solaris 상에서는, Java Web Start 는 독자적인 cookie 스토어 구현을 사용하는 것으로써, 지속 cookie 의 지원를 제공합니다.

## 프로그램에 의한 cookie 에의 액세스

어플리케이션이 디폴트의 cookie 의 처리를 오버라이드(override)하기 위한 방법은 여러종류 있습니다. 다음에 그 중의 4 개를 나타냅니다.

### `void URLConnection.setRequestProperty(String key, String value)`

이 방법에 의해, 어플리케이션은 `URLConnection` 에 독자적인 cookie 헤더를 설정하고 나서 접속을 확립할 수가 있습니다.

> `URL url = new URL( "http://java.sun.com/" );
> URLConnection conn = url.openConnection();
> conn.setRequestProperty("Cookie", "foo=bar");
> InputStream is = conn.getInputStream();
> .....`

접속이 확립되었을 때에, 독자적인 cookie 는 HTTP/HTTPS 요구 헤더내에서, 서버에 송신됩니다.

### `Map<String, List<String>> URLConnection.getHeaderFields()`

접속이 확립된 후에, 서버는 HTTP/HTTPS 응답 헤더내에서 cookie 를 돌려줍니다. 다음에 설명하는 방법에 의해, 어플리케이션은 `URLConnection` 를 개입시켜 cookie 의 값을 가져옵니다.

> `URL url = new URL( "http://java.sun.com/" );
> URLConnection conn = url.openConnection();
> conn.connect();
> .....
> Map<String, List<String>> headers = conn.getHeaderFields();
> List<String> values = headers.get("Set-Cookie");
> String cookieValue = null;
> for (Iterator iter = values.iterator(); iter.hasNext(); ) {
> String v = values.next();
> if (cookieValue == null)
> cookieValue = v;
> else
> cookieValue = cookieValue + ";" + v;
> }`

접속이 확립된 후에, 서버는 HTTP/HTTPS 응답 헤더내에서 cookie 를 돌려줍니다.

### `Map<String, List<String>> CookieHandler.get(URI uri, Map<String, List<String>> requestHeaders)`

이 방법에 의해 어플리케이션은, 주어진 URL 에 대한, 세션 cookie 또는 지속 cookie 를 취득할 수 있습니다.

> `String retrieveCookie(URL url)
> {
> String cookieValue = null;
> CookieHandler handler = CookieHandler.getDefault();
> if (handler ! = null) {
> Map<String, List<String>> headers = handler.get(url.toURI(), new Map<String, List<String>>());
> List<String> values = headers.get("Cookie");
> for (Iterator<String> iter=values.iterator(); iter.hasNext();) {
> String v = iter.next();
> if (cookieValue == null)
> cookieValue = v;
> else
> cookieValue = cookieValue + ";" + v;
> }
> }
> return cookieValue;
> }`

`CookieHandler` 는, 브라우저 또는 시스템의 cookie 포함을 추상화 한 것으로, 실행하기 위해서는 추가의 시큐리티 액세스권이 필요합니다. 상기의 코드는 어플리케이션이 신뢰되고 있는 경우에만 정상적으로 실행할 수 있습니다.

### `void CookieHandler.put(URI uri, Map<String, List<String>> responseHeaders)`

이 방법에 의해 어플리케이션은, 주어진 URL 에 대한 세션 cookie 또는 지속 cookie 를 설정할 수 있습니다.

> `void setCookie(URL url, String value)
> {
> CookieHandler handler = CookieHandler.getDefault();
> if (handler ! = null) {
> Map<String, List<String>> headers= new Map<String, List<String>>();
> List<String> values = new List<String>();
> values.add(value);
> headers.put("Cookie", values);
> handler.put(url.toURI(), headers);
> }
> }`

`CookieHandler` 는, 브라우저 또는 시스템의 cookie 포함을 추상화 한 것으로, 실행하기 위해서는 추가의 시큐리티 액세스권이 필요합니다. 상기의 코드는 어플리케이션이 신뢰되고 있는 경우에만 정상적으로 실행할 수 있습니다.

## 상세 정보

- 지속적인 클라이언트 상태 - HTTP Cookie:http://wp.netscape.com/newsref/std/cookie_spec.html
- 비공식 cookie FAQ:http://www.cookiecentral.com/faq/