文档

Java™ 教程-Java Tutorials 中文版
默认 CookieManager
Trail: Custom Networking
Lesson: Working With Cookies

默认 CookieManager

java.net.CookieManager提供了 CookieHandler 的具体实现,对于大多数用户来说,足以处理 HTTP 状态管理。CookieManager 将 Cookie 的存储与围绕,接受和拒绝的策略分开。使用 java.net.CookieStorejava.net.CookiePolicy 初始化 CookieManagerCookieStore 管理 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 响应必须设置“domain”属性,并且必须与 URL 中的主机域匹配。有关更多信息,请参阅 java.net.HttpCookie.domainMatches。需要不同策略的用户必须实现 CookiePolicy 接口并将其传递给 CookieManager 构造函数,或者是使用 setCookiePolicy(cookiePolicy) 方法将其设置给已构造的 CookieManager 实例。

从 cookie 存储区获取 cookie 时,CookieManager 还会强制执行 RFC 2965 的 3.3.4 节中的路径匹配规则。因此,cookie 还必须设置其“path”属性,以便在从 cookie 存储中获取 cookie 之前应用路径匹配规则。

总之,CookieManager 提供了处理 cookie 的框架,并为 CookieStore 提供了一个很好的默认实现。CookieManager 可以通过设置你自己的 CookieStoreCookiePolicy 或两者来实现高度自定义。


Previous page: CookieHandler Callback Mechanism
Next page: Custom CookieManager