# 默认 CookieManager

> 原文： [https://docs.oracle.com/javase/tutorial/networking/cookies/cookiemanager.html](https://docs.oracle.com/javase/tutorial/networking/cookies/cookiemanager.html)

[`java.net.CookieManager`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html) 提供`CookieHandler`的具体实现，对于大多数用户来说，足以处理 HTTP 状态管理。 `CookieManager`将 cookie 的存储与围绕，接受和拒绝的策略分开。用 [`java.net.CookieStore`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieStore.html) 和 [`java.net.CookiePolicy`](https://docs.oracle.com/javase/8/docs/api/java/net/CookiePolicy.html) 初始化`CookieManager`。 `CookieStore`管理 cookie 的存储。 `CookiePolicy`就 cookie 接受和拒绝做出政策决定。

以下代码显示了如何创建和设置系统范围的 CookieManager：

```
java.net.CookieManager cm = new java.net.CookieManager();
java.net.CookieHandler.setDefault(cm);

```

第一行调用默认的`CookieManager`构造函数来创建实例。第二行调用`CookieHandler`的静态`setDefault`方法来设置系统范围的处理程序。

默认的`CookieManager`构造函数使用默认的 cookie 存储和接受策略创建新的`CookieManager`实例。 `CookieStore`是存储任何已接受的 HTTP cookie 的位置。如果在创建时未指定，则`CookieManager`实例将使用内部内存实现。此实现不是持久性的，仅在 Java 虚拟机的生命周期内存在。需要持久存储的用户必须实现自己的商店。

`CookieManager`使用的默认 cookie 策略是`CookiePolicy.ACCEPT_ORIGINAL_SERVER`，它只接受来自原始服务器的 cookie。因此，来自服务器的`Set-Cookie`响应必须设置“域”属性，并且必须与 URL 中的主机域匹配。有关更多信息，请参阅 [`java.net.HttpCookie.domainMatches`](https://docs.oracle.com/javase/8/docs/api/java/net/HttpCookie.html#domainMatches-java.lang.String-java.lang.String-) 。需要不同策略的用户必须实现`CookiePolicy`接口并将其传递给`CookieManager`构造函数，或使用`setCookiePolicy(cookiePolicy)`方法将其设置为已构造的`CookieManager`实例。

从 cookie 存储中检索 cookie 时，`CookieManager`还会强制执行 [RFC 2965](http://www.ietf.org/rfc/rfc2965.txt) 第 3.3.4 节中的路径匹配规则。因此，cookie 还必须设置其“路径”属性，以便在从 cookie 存储中检索 cookie 之前应用路径匹配规则。

总之，`CookieManager`提供了处理 cookie 的框架，并为`CookieStore`提供了良好的默认实现。 `CookieManager`可以通过设置您自己的`CookieStore`，`CookiePolicy`或两者来实现高度自定义。