# CookieManager

public class **CookieManager** extends [CookieHandler](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html)  
CookieManager provides a concrete implementation of `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html`,
which separates the storage of cookies from the policy surrounding accepting
and rejecting cookies. A CookieManager is initialized with a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html`
which manages storage, and a `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html` object, which makes
policy decisions on cookie acceptance/rejection.

The HTTP cookie management in java.net package looks like:
>
>     use
>      CookieHandler <--- HttpURLConnection
>            ^
>            | impl
>            |         use
>      CookieManager ---> CookiePolicy
>                  |   use
>                  |---> HttpCookie
>                  |              ^
>                  |              | use
>                  |   use        |
>                  |---> CookieStore
>                                 ^
>                                 | impl
>                                 |
>                       Internal in-memory implementation
>      
> - CookieHandler is at the core of cookie management. User can call CookieHandler.setDefault to set a concrete CookieHanlder implementation to be used.
> - CookiePolicy.shouldAccept will be called by CookieManager.put to see whether or not one cookie should be accepted and put into cookie store. User can use any of three pre-defined CookiePolicy, namely ACCEPT_ALL, ACCEPT_NONE and ACCEPT_ORIGINAL_SERVER, or user can define his own CookiePolicy implementation and tell CookieManager to use it.
> - CookieStore is the place where any accepted HTTP cookie is stored in. If not specified when created, a CookieManager instance will use an internal in-memory implementation. Or user can implements one and tell CookieManager to use it.
> - Currently, only CookieStore.add(URI, HttpCookie) and CookieStore.get(URI) are used by CookieManager. Others are for completeness and might be needed by a more sophisticated CookieStore implementation, e.g. a NetscapeCookieSotre.

There're various ways user can hook up his own HTTP cookie management behavior, e.g.
> - Use CookieHandler.setDefault to set a brand new `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html` implementation
> - Let CookieManager be the default `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html` implementation, but implement user's own `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html` and `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html` and tell default CookieManager to use them:
>   >
>   > ```
>   >        // this should be done at the beginning of an HTTP session
>   >        CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));
>   >      
>   > ```
> - Let CookieManager be the default `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html` implementation, but use customized `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html`:
>   >
>   > ```
>   >        // this should be done at the beginning of an HTTP session
>   >        CookieHandler.setDefault(new CookieManager());
>   >        // this can be done at any point of an HTTP session
>   >        ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy());
>   >      
>   > ```

The implementation conforms to [RFC 2965](http://www.ietf.org/rfc/rfc2965.txt), section 3.3.

##### See Also

- `https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html`

### Public Constructor Summary

|---|---|
|   | [CookieManager](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#CookieManager())() Create a new cookie manager. |
|   | [CookieManager](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#CookieManager(java.net.CookieStore,%20java.net.CookiePolicy))([CookieStore](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html) store, [CookiePolicy](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html) cookiePolicy) Create a new cookie manager with specified cookie store and cookie policy. |

### Public Method Summary

|---|---|
| [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> | [get](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#get(java.net.URI,%20java.util.Map<java.lang.String,%20java.util.List<java.lang.String>>))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> requestHeaders) Gets all the applicable cookies from a cookie cache for the specified uri in the request header. |
| [CookieStore](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html) | [getCookieStore](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#getCookieStore())() To retrieve current cookie store. |
| void | [put](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#put(java.net.URI,%20java.util.Map<java.lang.String,%20java.util.List<java.lang.String>>))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> responseHeaders) Sets all the applicable cookies, examples are response header fields that are named Set-Cookie2, present in the response headers into a cookie cache. |
| void | [setCookiePolicy](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieManager.html#setCookiePolicy(java.net.CookiePolicy))([CookiePolicy](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html) cookiePolicy) To set the cookie policy of this cookie manager. |

### Inherited Method Summary

From class [java.net.CookieHandler](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html)

|---|---|
| abstract [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> | [get](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html#get(java.net.URI,%20java.util.Map<java.lang.String,%20java.util.List<java.lang.String>>))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> requestHeaders) Gets all the applicable cookies from a cookie cache for the specified uri in the request header. |
| synchronized static [CookieHandler](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html) | [getDefault](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html#getDefault())() Gets the system-wide cookie handler. |
| abstract void | [put](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html#put(java.net.URI,%20java.util.Map<java.lang.String,%20java.util.List<java.lang.String>>))([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> responseHeaders) Sets all the applicable cookies, examples are response header fields that are named Set-Cookie2, present in the response headers into a cookie cache. |
| synchronized static void | [setDefault](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html#setDefault(java.net.CookieHandler))([CookieHandler](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieHandler.html) cHandler) Sets (or unsets) the system-wide cookie handler. |

From class [java.lang.Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html)

|---|---|
| [Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html) | [clone](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#clone())() Creates and returns a copy of this `Object`. |
| boolean | [equals](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#equals(java.lang.Object))([Object](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html) obj) Compares this instance with the specified object and indicates if they are equal. |
| void | [finalize](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#finalize())() Invoked when the garbage collector has detected that this instance is no longer reachable. |
| final [Class](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html)\<?\> | [getClass](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#getClass())() Returns the unique instance of `https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Class.html` that represents this object's class. |
| int | [hashCode](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#hashCode())() Returns an integer hash code for this object. |
| final void | [notify](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#notify())() Causes a thread which is waiting on this object's monitor (by means of calling one of the `wait()` methods) to be woken up. |
| final void | [notifyAll](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#notifyAll())() Causes all threads which are waiting on this object's monitor (by means of calling one of the `wait()` methods) to be woken up. |
| [String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html) | [toString](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#toString())() Returns a string containing a concise, human-readable description of this object. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait(long,%20int))(long timeout, int nanos) Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object or until the specified timeout expires. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait(long))(long timeout) Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object or until the specified timeout expires. |
| final void | [wait](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/Object.html#wait())() Causes the calling thread to wait until another thread calls the `notify()` or `notifyAll()` method of this object. |

## Public Constructors

#### public
**CookieManager**
()

Create a new cookie manager.

This constructor will create new cookie manager with default
cookie store and accept policy. The effect is same as
`CookieManager(null, null)`.

#### public
**CookieManager**
([CookieStore](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html) store, [CookiePolicy](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html) cookiePolicy)

Create a new cookie manager with specified cookie store and cookie policy.

##### Parameters

| store | a `CookieStore` to be used by cookie manager. if `null`, cookie manager will use a default one, which is an in-memory CookieStore implementation. |
| cookiePolicy | a `CookiePolicy` instance to be used by cookie manager as policy callback. if `null`, ACCEPT_ORIGINAL_SERVER will be used. |
|---|---|

## Public Methods

#### public [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\>
**get**
([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> requestHeaders)

Gets all the applicable cookies from a cookie cache for the
specified uri in the request header.

The `URI` passed as an argument specifies the intended use for
the cookies. In particular the scheme should reflect whether the cookies
will be sent over http, https or used in another context like javascript.
The host part should reflect either the destination of the cookies or
their origin in the case of javascript.

It is up to the implementation to take into account the `URI` and
the cookies attributes and security settings to determine which ones
should be returned.

HTTP protocol implementers should make sure that this method is
called after all request headers related to choosing cookies
are added, and before the request is sent.

<br />

##### Parameters

| uri | a `URI` representing the intended use for the cookies |
| requestHeaders | - a Map from request header field names to lists of field values representing the current request headers |
|---|---|

##### Returns

- an immutable map from state management headers, with field names "Cookie" or "Cookie2" to a list of cookies containing state information

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) |   |
|---|---|

#### public [CookieStore](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookieStore.html)
**getCookieStore**
()

To retrieve current cookie store.

##### Returns

- the cookie store currently used by cookie manager.

#### public void
**put**
([URI](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/URI.html) uri, [Map](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/Map.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html), [List](https://developers.google.com/j2objc/javadoc/jre/reference/java/util/List.html)\<[String](https://developers.google.com/j2objc/javadoc/jre/reference/java/lang/String.html)\>\> responseHeaders)

Sets all the applicable cookies, examples are response header
fields that are named Set-Cookie2, present in the response
headers into a cookie cache.

##### Parameters

| uri | a `URI` where the cookies come from |
| responseHeaders | an immutable map from field names to lists of field values representing the response header fields returned |
|---|---|

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) |   |
|---|---|

#### public void
**setCookiePolicy**
([CookiePolicy](https://developers.google.com/j2objc/javadoc/jre/reference/java/net/CookiePolicy.html) cookiePolicy)

To set the cookie policy of this cookie manager.

A instance of `CookieManager` will have
cookie policy ACCEPT_ORIGINAL_SERVER by default. Users always
can call this method to set another cookie policy.

##### Parameters

| cookiePolicy | the cookie policy. Can be `null`, which has no effects on current cookie policy. |
|---|---|