java.lang.Object
java.net.CookieHandler
java.net.CookieManager
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
- 参见:
-
构造方法总结
构造方法构造方法描述创建一个新的 cookie 管理器。CookieManager
(CookieStore store, CookiePolicy cookiePolicy) 使用指定的 cookie 存储和 cookie 策略创建一个新的 cookie 管理器。 -
方法总结
修饰符和类型方法描述从请求标头中指定 uri 的 cookie 缓存中获取所有适用的 cookie。检索当前的 cookie 存储。void
设置所有适用的 cookie,示例是名为 Set-Cookie2 的响应标头字段,出现在响应标头中到 cookie 缓存中。void
setCookiePolicy
(CookiePolicy cookiePolicy) 设置此 cookie 管理器的 cookie 策略。在类 java.net.CookieHandler 中声明的方法
getDefault, setDefault
-
构造方法详细信息
-
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。
-
-
方法详情
-
setCookiePolicy
设置此 cookie 管理器的 cookie 策略。默认情况下,
CookieManager
的实例将具有 cookie 策略 ACCEPT_ORIGINAL_SERVER。用户总是可以调用此方法来设置另一个 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
从请求标头中指定 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
从类复制的描述:CookieHandler
设置所有适用的 cookie,示例是名为 Set-Cookie2 的响应标头字段,出现在响应标头中到 cookie 缓存中。- 指定者:
put
在类CookieHandler
中- 参数:
uri
- cookie 来自的URI
responseHeaders
- 从字段名称到表示返回的响应头字段的字段值列表的不可变映射- 抛出:
IOException
- 如果发生 I/O 错误- 参见:
-