Module  java.base
软件包  java.net

Class 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 is at the core of cookie management. User can call CookieHandler.setDefault to set a concrete CookieHanlder implementation to be used.
    • CookiePolicy.shouldAccept will be called by CookieManager.put to see whether or not one cookie should be accepted and put into cookie store. User can use any of three pre-defined CookiePolicy, namely ACCEPT_ALL, ACCEPT_NONE and ACCEPT_ORIGINAL_SERVER, or user can define his own CookiePolicy implementation and tell CookieManager to use it.
    • CookieStore is the place where any accepted HTTP cookie is stored in. If not specified when created, a CookieManager instance will use an internal in-memory implementation. Or user can implements one and tell CookieManager to use it.
    • Currently, only CookieStore.add(URI, HttpCookie) and CookieStore.get(URI) are used by CookieManager. Others are for completeness and might be needed by a more sophisticated CookieStore implementation, e.g. a NetscapeCookieStore.

    用户可以通过各种方式连接自己的HTTP cookie管理行为,例如

    • Use CookieHandler.setDefault to set a brand new CookieHandler implementation
    • Let CookieManager be the default CookieHandler implementation, but implement user's own CookieStore and CookiePolicy and tell default CookieManager to use them:
             // this should be done at the beginning of an HTTP session
             CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));
           
    • Let CookieManager be the default CookieHandler implementation, but use customized 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
    另请参见:
    CookiePolicy
    • 构造方法详细信息

      • CookieManager

        public CookieManager​()
        创建一个新的cookie管理器。

        此构造函数将创建具有默认Cookie存储并接受策略的新Cookie管理器。 效果与CookieManager(null, null)相同。

      • CookieManager

        public CookieManager​(CookieStore store,
                             CookiePolicy cookiePolicy)
        使用指定的Cookie存储和Cookie策略创建一个新的cookie管理器。
        参数
        store - 一个CookieStore被cookie管理器使用。 如果是null ,cookie管理器将使用默认值,这是一个内存中的CookieStore实现。
        cookiePolicy - 由cookie管理器用作策略回调的CookiePolicy实例。 如果是null ,将使用ACCEPT_ORIGINAL_SERVER。
    • 方法详细信息

      • setCookiePolicy

        public void setCookiePolicy​(CookiePolicy cookiePolicy)
        设置此Cookie管理器的Cookie策略。

        默认情况下, CookieManager的实例将具有ACCEPT_ORIGINAL_SERVER的Cookie策略。 用户总是可以调用此方法来设置另一个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。

        作为参数传递的URI指定了Cookie的预期用途。 特别地,该方案应反映Cookie是否通过http,https发送或在其他上下文中使用,如javascript。 在javascript的情况下,主机部分应反映cookie的目的地或其原点。

        考虑到URI和cookies属性和安全设置来确定哪些应该返回,这取决于实现。

        HTTP协议实现者应确保在添加与选择cookie相关的所有请求头之后,以及发送请求之前调用此方法。

        Specified by:
        getCookieHandler
        参数
        uri - 表示Cookie的预期用途的 URI
        requestHeaders - - 从请求头字段名称映射到表示当前请求头的字段值的列表
        结果
        来自状态管理标题的不可变地图,字段名称为“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缓存中。
        Specified by:
        putCookieHandler
        参数
        uri - 一个 URI ,其中饼干来自
        responseHeaders - 从字段名称到表示返回的响应标头字段的字段值的列表的不可变映射
        异常
        IOException - 如果发生I / O错误
        另请参见:
        CookieHandler.get(URI, Map)