模块 java.base
 java.net

类 CookieManager


public class CookieManager extends CookieHandler
CookieManager 提供了 CookieHandler 的具体实现,它将 cookie 的存储与接受和拒绝 cookie 的策略分开。 CookieManager 由管理存储的 CookieStore 和一个 CookiePolicy 对象初始化,后者对 cookie 接受/拒绝做出策略决定。

java.net 包中的 HTTP cookie 管理如下所示:


         use
 CookieHandler <------- HttpURLConnection
    ^
    | impl
    |     use
 CookieManager -------> CookiePolicy
       |  use
       |--------> HttpCookie
       |       ^
       |       | use
       |  use    |
       |--------> CookieStore
              ^
              | impl
              |
         Internal in-memory implementation
  
  • CookieHandler 是 cookie 管理的核心。用户可以调用 CookieHandler.setDefault 来设置要使用的具体 CookieHandler 实现。
  • CookiePolicy.shouldAccept 将由 CookieManager.put 调用,以查看是否应接受一个 cookie 并将其放入 cookie 存储区。用户可以使用三个预定义的 CookiePolicy 中的任何一个,即 ACCEPT_ALL、ACCEPT_NONE 和 ACCEPT_ORIGINAL_SERVER,或者用户可以定义自己的 CookiePolicy 实现并告诉 CookieManager 使用它。
  • CookieStore 是存储任何接受的 HTTP cookie 的地方。如果在创建时未指定,则 CookieManager 实例将使用内部内存实现。或者用户可以实现一个并告诉 CookieManager 使用它。
  • 目前,CookieManager 仅使用 CookieStore.add(URI, HttpCookie) 和 CookieStore.get(URI)。其他的是为了完整性,可能需要更复杂的 CookieStore 实现,例如 NetscapeCookieStore。

用户可以通过多种方式连接自己的 HTTP cookie 管理行为,例如

  • 使用 CookieHandler.setDefault 设置全新的 CookieHandler 实现
  • 让 CookieManager 成为默认的 CookieHandler 实现,但实现用户自己的 CookieStore CookiePolicy 并告诉默认 CookieManager 使用它们:
        // this should be done at the beginning of an HTTP session
        CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));
       
  • 让 CookieManager 成为默认的 CookieHandler 实现,但使用自定义的 CookiePolicy
        // 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());
       

实现符合 RFC 2965 ,第 3.3 节。

自从:
1.6
参见:
  • 构造方法详细信息

    • CookieManager

      public CookieManager()
      创建一个新的 cookie 管理器。

      此构造函数将使用默认的 cookie 存储和接受策略创建新的 cookie 管理器。效果与 CookieManager(null, null) 相同。

    • CookieManager

      public CookieManager(CookieStore  store, CookiePolicy  cookiePolicy)
      使用指定的 cookie 存储和 cookie 策略创建一个新的 cookie 管理器。
      参数:
      store - cookie 管理器使用的 CookieStore。如果是 null ,cookie 管理器将使用默认的,这是一个内存中的 CookieStore 实现。
      cookiePolicy - cookie 管理器用作策略回调的 CookiePolicy 实例。如果是 null ,将使用 ACCEPT_ORIGINAL_SERVER。
  • 方法详情

    • setCookiePolicy

      public void setCookiePolicy(CookiePolicy  cookiePolicy)
      设置此 cookie 管理器的 cookie 策略。

      默认情况下,CookieManager 的实例将具有 cookie 策略 ACCEPT_ORIGINAL_SERVER。用户总是可以调用此方法来设置另一个 cookie 策略。

      参数:
      cookiePolicy - cookie 策略。可以是 null ,它对当前的 cookie 策略没有影响。
    • getCookieStore

      public CookieStore  getCookieStore()
      检索当前的 cookie 存储。
      返回:
      cookie 管理器当前使用的 cookie 存储。
    • get

      public Map <String ,List <String >> get(URI  uri, Map <String ,List <String >> requestHeaders) throws IOException
      从类复制的描述:CookieHandler
      从请求标头中指定 uri 的 cookie 缓存中获取所有适用的 cookie。

      作为参数传递的 URI 指定了 cookie 的预期用途。特别是该方案应反映 cookie 是通过 http、https 发送还是在其他上下文(如 javascript)中使用。在 javascript 的情况下,主机部分应反映 cookie 的目的地或它们的来源。

      由实施考虑 URI 和 cookie 属性和安全设置来确定应返回哪些。

      HTTP 协议实现者应确保在添加所有与选择 cookie 相关的请求标头之后,在发送请求之前调用此方法。

      指定者:
      get 在类 CookieHandler
      参数:
      uri - 一个 URI 表示 cookie 的预期用途
      requestHeaders - - 从请求标头字段名称到表示当前请求标头的字段值列表的映射
      返回:
      从状态管理标头(字段名称为“Cookie”或“Cookie2”)到包含状态信息的 cookie 列表的不可变映射
      抛出:
      IOException - 如果发生 I/O 错误
      参见:
    • put

      public void put(URI  uri, Map <String ,List <String >> responseHeaders) throws IOException
      从类复制的描述:CookieHandler
      设置所有适用的 cookie,示例是名为 Set-Cookie2 的响应标头字段,出现在响应标头中到 cookie 缓存中。
      指定者:
      put 在类 CookieHandler
      参数:
      uri - cookie 来自的 URI
      responseHeaders - 从字段名称到表示返回的响应头字段的字段值列表的不可变映射
      抛出:
      IOException - 如果发生 I/O 错误
      参见: