java.net

接口
异常
java.lang.Object
  继承者 java.net.CookieHandler
      继承者 java.net.CookieManager

public class CookieManager
     
extends CookieHandler

CookieManager 提供 CookieHandler 的具体实现,它将 cookie 的存储区与围绕接受和拒绝 cookie 的策略分离开来。使用管理存储的 CookieStore 以及做出 cookie 接受/拒绝决策的 CookiePolicy 对象来初始化 CookieManager。

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 设置要使用的具体 CookieHanlder 实现。
  • CookieManager.put 调用 CookiePolicy.shouldAccept 以查看 cookie 是否应该被接受并放入 cookie 存储区。用户可以使用三种预定义 CookiePolicy(即 ACCEPT_ALL、ACCEPT_NONE 和 ACCEPT_ORIGINAL_SERVER)中的任何一种,或者定义自己的 CookiePolicy 实现并告知 CookieManager 使用该策略。
  • CookieStore 是存储任何已接受 HTTP cookie 的地方。如果创建时未指定,那么 CookieManager 实例将使用内部内存实现。用户也可以实现一个 CookieStore 并告知 CookieManager 使用该存储区。
  • 当前,CookieManager 只能使用 CookieStore.add(URI, HttpCookie) 和 CookieStore.get(URI)。其他方法是出于完整性考虑,也可能是更复杂 CookieStore 实现(例如 NetscapeCookieSotre)的需要。

用户可以用各种方式“钩住”自己的 HTTP cookie 管理行为,例如:

  • 使用 CookieHandler.setDefault 设置全新的 CookieHandler 实现
  • 让 CookieManager 成为默认 CookieHandler 实现,但实现用户自己的 CookieStoreCookiePolicy, 并告知默认 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()
          创建一个新 cookie 管理器。
CookieManager(CookieStore store, CookiePolicy cookiePolicy)
          使用指定 cookie 存储区和 cookie 策略创建一个新 cookie 管理器。
 
方法摘要
 Map<String,List<String>> get(URI uri, Map<String,List<String>> requestHeaders)
          从请求头中指定 uri 的 cookie 缓存中获取所有可用的 cookie。
 CookieStore getCookieStore()
          获取当前 cookie 存储区。
 void put(URI uri, Map<String,List<String>> responseHeaders)
          将响应头中出现的所有可用 cookie(例如名为 Set-Cookie2 的响应头字段)设置到 cookie 缓存中。
 void setCookiePolicy(CookiePolicy cookiePolicy)
          设置此 cookie 管理器的 cookie 策略。
 
从类 java.net.CookieHandler 继承的方法
getDefault, setDefault
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

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。 HTTP 协议实现程序应该确保在添加所有与选择 cookie 相关的请求头之后且在发送请求之前调用此方法。

指定者:
CookieHandler 中的 get
参数:
uri - 作为请求中 cookie 发送目标的 <code>URI</code>
requestHeaders - 从请求头字段名到表示当前请求头的字段值列表的 Map
返回:
从字段名为 "Cookie" 或 "Cookie2" 的状态管理头到包含状态信息的 cookie 列表的映射
抛出:
IOException - 如果发生 I/O * 错误
另请参见:
CookieHandler.put(URI, Map)

put

public void put(URI uri,
                Map<String,List<String>> responseHeaders)
         throws IOException
从类 CookieHandler 复制的描述
将响应头中出现的所有可用 cookie(例如名为 Set-Cookie2 的响应头字段)设置到 cookie 缓存中。

指定者:
CookieHandler 中的 put
参数:
uri - <code>URI</code>,cookie 来自其中
responseHeaders - 从字段名到表示返回的响应头字段的字段值列表的不可变映射
抛出:
IOException - 如果发生 I/O 错误
另请参见:
CookieHandler.get(URI, Map)