CookieManager
java.lang.Object
|—java.net.CookieHandler
|—|—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 来设置要使用的具体 CookieHanlder 实现。
- 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 实现,例如 网景CookieSotre。
用户可以通过多种方式连接自己的 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());
构造函数摘要
构造函数 | 描述 |
---|---|
CookieManager() | 创建一个新的 cookie 管理器。 |
CookieManager(CookieStore store, CookiePolicy cookiePolicy) | 使用指定的 cookie 存储和 cookie 策略创建一个新的 cookie 管理器。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
MapString,ListString | get(URI uri, MapString,ListString requestHeaders) | 从请求标头中指定 uri 的 cookie 缓存中获取所有适用的 cookie。 |
CookieStore | getCookieStore() | 检索当前的 cookie 存储。 |
void | put(URI uri, MapString,ListString 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 MapString,ListString get(URI uri, MapString,ListString requestHeaders) throws IOException
从类复制的描述:CookieHandler
从请求标头中指定 uri 的 cookie 缓存中获取所有适用的 cookie。
作为参数传递的 URI 指定了 cookie 的预期用途。 特别是该方案应反映 cookie 是通过 http、https 发送还是在其他上下文(如 javascript)中使用。 在 javascript 的情况下,主机部分应反映 cookie 的目的地或它们的来源。
由实现来考虑 URI 和 cookie 属性和安全设置来确定应该返回哪些。
HTTP 协议实现者应确保在添加与选择 cookie 相关的所有请求标头之后、发送请求之前调用此方法。
指定者:
进入类 CookieHandler
参数:
参数名称 | 参数描述 |
---|---|
uri | 表示 cookie 的预期用途的 URI |
requestHeaders | – 从请求标头字段名称到表示当前请求标头的字段值列表的映射 |
返回:
从状态管理标头(字段名称为“Cookie”或“Cookie2”)到包含状态信息的 cookie 列表的不可变映射
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |
put
public void put(URI uri, MapString,ListString responseHeaders) throws IOException
从类复制的描述:CookieHandler
设置所有适用的 cookie,示例是名为 Set-Cookie2 的响应头字段,存在于 cookie 缓存中的响应头中。
指定者:
放入类 CookieHandler
参数:
参数名称 | 参数描述 |
---|---|
uri | cookie 的来源 URI |
responseHeaders | 从字段名称到表示返回的响应标头字段的字段值列表的不可变映射 |
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误 |