# 访问 Cookie

> 译文： [https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/accessingCookies.html](https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/accessingCookies.html)

您可以在富 Internet 应用程序（RIA）中设置和检索 Cookie。 Cookie 可以增强 RIA 的功能。例如，考虑在各种网页上有 applet 的场景。网页上的小程序无法直接访问或与另一个网页上的小程序共享信息。在这种情况下，cookie 提供 applet 之间的重要连接，并帮助一个 applet 将信息传递到另一个网页上的另一个 applet。 Java Web Start 应用程序还可以使用 cookie 在客户端上存储信息。

Cookie Applet 示例有一个 [`CookieAccessor`](examples/applet_AccessingCookies/src/CookieAccessor.java ) 类，用于检索和设置 cookie。

## 正在检索 Cookies

以下代码段显示`CookieAccessor`类的`getCookieUsingCookieHandler`方法：

```
public void getCookieUsingCookieHandler() { 
    try {       
        // Instantiate CookieManager;
        // make sure to set CookiePolicy
        CookieManager manager = new CookieManager();
        manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);
        CookieHandler.setDefault(manager);

        // get content from URLConnection;
        // cookies are set by web site
        URL url = new URL("http://host.example.com");
        URLConnection connection = url.openConnection();
        connection.getContent();

        // get cookies from underlying
        // CookieStore
        CookieStore cookieJar =  manager.getCookieStore();
        List <HttpCookie> cookies =
            cookieJar.getCookies();
        for (HttpCookie cookie: cookies) {
          System.out.println("CookieHandler retrieved cookie: " + cookie);
        }
    } catch(Exception e) {
        System.out.println("Unable to get cookie using CookieHandler");
        e.printStackTrace();
    }
}  

```

[`CookieManager`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html) 类是 cookie 管理的主要入口点。创建`CookieManager`类的实例并设置其 [`CookiePolicy`](https://docs.oracle.com/javase/8/docs/api/java/net/CookiePolicy.html) 。将`CookieManager`的此实例设置为默认 [`CookieHandler`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieHandler.html) 。

打开 [`URLConnection`](https://docs.oracle.com/javase/8/docs/api/java/net/URLConnection.html) 到您选择的网站。

接下来，使用`getCookies`方法从底层 [`CookieStore`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieStore.html) 中检索 cookie。

## 设置 Cookies

以下代码段显示`CookieAccessor`类的`setCookieUsingCookieHandler`方法：

```
public void setCookieUsingCookieHandler() {
    try {
        // instantiate CookieManager
        CookieManager manager = new CookieManager();
        CookieHandler.setDefault(manager);
        CookieStore cookieJar =  manager.getCookieStore();

        // create cookie
        HttpCookie cookie = new HttpCookie("UserName", "John Doe");

        // add cookie to CookieStore for a
        // particular URL
        URL url = new URL("http://host.example.com");
        cookieJar.add(url.toURI(), cookie);
        System.out.println("Added cookie using cookie handler");
    } catch(Exception e) {
        System.out.println("Unable to set cookie using CookieHandler");
        e.printStackTrace();
    }
}

```

如[检索 Cookies](#retrieving) 所示， [`CookieManager`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html) 类是 cookie 管理的主要入口点。创建`CookieManager`类的实例并将实例设置为默认值 [`CookieHandler`](https://docs.oracle.com/javase/8/docs/api/java/net/CookieHandler.html) 。

使用必要信息创建所需的 [`HttpCookie`](https://docs.oracle.com/javase/8/docs/api/java/net/HttpCookie.html) 。在我们的示例中，我们创建了一个新的`HttpCookie`，将`UserName`设置为`John Doe`。

接下来，将 cookie 添加到底层 cookie 存储区。

## 运行 Cookie 小程序示例

要访问 cookie，您必须签署 RIA JAR 文件并请求在安全沙箱之外运行的权限。请参阅 [`jarsigner`](https://docs.oracle.com/javase/8/docs/technotes/tools/index.html#security) 工具的文档以了解如何对 JAR 文件进行签名。有关请求权限的信息，请参阅富 Internet 应用程序中的[安全性。](../doingMoreWithRIA/security.html)

[下载 _Cookie Applet_ 示例的源代码](examplesIndex.html#AccessingCookies)进行进一步实验。