本教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用已不再可用的技术。
请参阅Java语言变化,了解Java SE 9及以后版本中更新的语言特性的摘要。
请参阅JDK发行说明,了解所有JDK版本的新功能、增强功能以及已移除或已弃用选项的信息。
java.net.CookieManager
提供了一个具体的CookieHandler
实现,对于大多数用户来说,它足以处理HTTP状态管理。 CookieManager
将cookie的存储与接受和拒绝它们的策略分离。 CookieManager
使用java.net.CookieStore
和java.net.CookiePolicy
进行初始化。 CookieStore
管理cookie的存储。 CookiePolicy
根据策略决定接受和拒绝cookie。
以下代码显示了如何创建和设置全局的CookieManager:
java.net.CookieManager cm = new java.net.CookieManager(); java.net.CookieHandler.setDefault(cm);
第一行调用默认的CookieManager
构造函数创建实例。第二行调用CookieHandler
的静态setDefault
方法设置全局处理程序。
默认的CookieManager
构造函数创建一个具有默认cookie存储和接受策略的新CookieManager
实例。 CookieStore
是存储任何接受的HTTP cookie的地方。如果在创建时未指定,CookieManager
实例将使用一个内部的内存实现。此实现不是持久的,只在Java虚拟机的生命周期内存在。需要持久存储的用户必须实现自己的存储。
CookieManager
使用的默认cookie策略是CookiePolicy.ACCEPT_ORIGINAL_SERVER
,仅接受来自原始服务器的cookie。因此,服务器的Set-Cookie
响应必须设置“domain”属性,并且必须与URL中的主机域匹配。有关更多信息,请参见java.net.HttpCookie.domainMatches
。需要不同策略的用户必须实现CookiePolicy
接口,并将其传递给CookieManager
构造函数或使用setCookiePolicy(cookiePolicy)
方法将其设置为已构造的CookieManager
实例。
从cookie存储中检索cookie时,CookieManager
还强制执行RFC 2965第3.3.4节的路径匹配规则。因此,cookie还必须设置其“path”属性,以便在从cookie存储中检索cookie之前可以应用路径匹配规则。
总之,CookieManager
提供了处理cookie的框架,并为CookieStore
提供了一个很好的默认实现。通过设置自己的CookieStore
、CookiePolicy
或两者,可以对CookieManager
进行高度定制。