java.lang.Object
java.net.CookieHandler
java.net.CookieManager
CookieManager提供了
CookieHandler
的具体实现,它将cookie的存储与接受和拒绝cookie的策略分开。CookieManager初始化时需要一个CookieStore
来管理存储,以及一个CookiePolicy
对象来决定cookie的接受/拒绝策略。
java.net包中的HTTP cookie管理如下:
使用 CookieHandler <------- HttpURLConnection ^ | 实现 | 使用 CookieManager -------> CookiePolicy | 使用 |--------> HttpCookie | ^ | | 使用 | 使用 | |--------> CookieStore ^ | 实现 | 内部内存实现
- 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实例将使用一个内部内存实现。用户也可以实现自己的CookieStore并告诉CookieManager使用它。
- 目前,CookieManager仅使用CookieStore.add(URI, HttpCookie)和CookieStore.get(URI)。其他方法是为了完整性,并可能需要更复杂的CookieStore实现,例如NetscapeCookieStore。
用户可以通过各种方式连接自己的HTTP cookie管理行为,例如:
- 使用CookieHandler.setDefault来设置全新的
CookieHandler
实现- 让CookieManager成为默认的
CookieHandler
实现,但实现用户自己的CookieStore
和CookiePolicy
,并告诉默认的CookieManager使用它们:// 这应该在HTTP会话开始时完成 CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));- 让CookieManager成为默认的
CookieHandler
实现,但使用自定义的CookiePolicy
:// 这应该在HTTP会话开始时完成 CookieHandler.setDefault(new CookieManager()); // 这可以在HTTP会话的任何时候完成 ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy());
该实现符合RFC 2965第3.3节。
- 自版本:
- 1.6
- 外部规范
- 参见:
-
Constructor Summary
ConstructorDescription创建一个新的cookie管理器。CookieManager
(CookieStore store, CookiePolicy cookiePolicy) 使用指定的cookie存储和cookie策略创建一个新的cookie管理器。 -
Method Summary
Modifier and TypeMethodDescription从请求头中的cookie缓存中获取指定URI的所有适用cookie。检索当前的cookie存储。void
将响应头中名为Set-Cookie2的字段中的所有适用cookie设置到cookie缓存中。void
setCookiePolicy
(CookiePolicy cookiePolicy) 设置此cookie管理器的cookie策略。Methods declared in class java.net.CookieHandler
getDefault, setDefault
-
Constructor Details
-
CookieManager
public CookieManager()创建一个新的cookie管理器。此构造函数将使用默认的cookie存储和接受策略创建新的cookie管理器。效果与
CookieManager(null, null)
相同。 -
CookieManager
使用指定的cookie存储和cookie策略创建一个新的cookie管理器。- 参数:
-
store
- 要被cookie管理器使用的CookieStore
。如果为null
,cookie管理器将使用一个默认的内存中的CookieStore实现。 -
cookiePolicy
- 要被cookie管理器作为策略回调使用的CookiePolicy
实例。如果为null
,将使用ACCEPT_ORIGINAL_SERVER。
-
-
Method Details
-
setCookiePolicy
设置此cookie管理器的cookie策略。CookieManager
实例默认具有ACCEPT_ORIGINAL_SERVER的cookie策略。用户始终可以调用此方法来设置另一个cookie策略。- 参数:
-
cookiePolicy
- cookie策略。可以为null
,对当前cookie策略没有影响。
-
getCookieStore
检索当前的cookie存储。- 返回:
- 当前被cookie管理器使用的cookie存储。
-
get
public Map<String,List<String>> get(URI uri, Map<String, List<String>> requestHeaders) throws IOException从类中复制的描述:CookieHandler
从请求头中的cookie缓存中获取指定URI的所有适用cookie。作为参数传递的
URI
指定了cookie的预期用途。特别是,方案应反映cookie是否将通过http、https发送,或者在其他上下文中如javascript中使用。主机部分应反映cookie的目的地或在javascript中的来源。实现需要考虑
URI
和cookie属性以及安全设置,以确定应返回哪些cookie。HTTP协议实现者应确保在添加所有与选择cookie相关的请求头之后调用此方法,并在发送请求之前调用。
- 指定者:
-
get
在类CookieHandler
中 - 参数:
-
uri
- 表示cookie预期用途的URI
-
requestHeaders
- 从请求头字段名称到当前请求头字段值列表的映射 - 返回:
- 一个不可变的状态管理头映射,字段名为"Cookie"或"Cookie2",值为包含状态信息的cookie列表
- 抛出:
-
IOException
- 如果发生I/O错误 - 参见:
-
put
从类中复制的描述:CookieHandler
将响应头中名为Set-Cookie2的字段中的所有适用cookie设置到cookie缓存中。- 指定者:
-
put
在类CookieHandler
中 - 参数:
-
uri
- cookie来源的URI
-
responseHeaders
- 从字段名称到返回的响应头字段值列表的不可变映射 - 抛出:
-
IOException
- 如果发生I/O错误 - 参见:
-