Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ApacheHTTP组件-设置cookie_Java_Apache_Http_Cookies - Fatal编程技术网

Java ApacheHTTP组件-设置cookie

Java ApacheHTTP组件-设置cookie,java,apache,http,cookies,Java,Apache,Http,Cookies,我正在使用ApacheHTTP组件为localhost设置cookie。当我返回cookie时,我得到了输出: [version: 0][name: testCookie][value: test][domain: http://localhost:9090/][path: /][expiry: Mon Aug 07 19:11:56 BST 2017] 这让我觉得cookie已经设置好了,但是当我在chrome中检查它是否在chrome://settings/cookies 那里什么都没有

我正在使用ApacheHTTP组件为localhost设置cookie。当我返回cookie时,我得到了输出:

[version: 0][name: testCookie][value: test][domain: http://localhost:9090/][path: /][expiry: Mon Aug 07 19:11:56 BST 2017]
这让我觉得cookie已经设置好了,但是当我在chrome中检查它是否在chrome://settings/cookies 那里什么都没有

    public Object makeCookie(String p) throws IOException, MalformedCookieException{

        Calendar myCal = Calendar.getInstance();
        myCal.set(2017, 07, 07);
        Date theDate = myCal.getTime();
        CookieStore cookieStore = new BasicCookieStore();
        BasicClientCookie cookie = new BasicClientCookie("testCookie",p);
        // Set effective domain and path attributes
        cookie.setDomain("http://localhost:9090/");
        cookie.setPath("/");
        cookie.setExpiryDate(theDate);
        cookieStore.addCookie(cookie);
        // Set attributes exactly as sent by the server
        cookie.setAttribute(ClientCookie.PATH_ATTR, "/");
        cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "http://localhost:9090/");
        CloseableHttpClient httpclient = HttpClients.custom()
                .setDefaultCookieStore(cookieStore)
                .build();

        return cookie;
}

我已经在这个问题上纠缠了几个小时,我不明白为什么它没有存储在浏览器中

实际上,您的代码只是创建了客户端cookie存储,但没有将创建的cookie发送到任何地方

根据Wikipedia(),“cookie是从网站发送的一小段数据,在用户浏览时存储在用户的web浏览器中。”

HttpClient不是您需要的实体,因为它是客户机,而不是服务器。您可以使用它执行对网站的HTTP请求,但它只是消费者,就像您的本地浏览器一样。因此,即使在客户端上指定cookie存储,也不会对本地浏览器产生影响。服务器(比如说网站)是向客户发送cookies的人

代码中的HttpClient和本地浏览器是两个独立的客户端。他们可以从网站接收cookies,但这两个客户端本身不是网站。这就是为什么
CloseableHttpClient
对象在这里是无用的。此外,在代码中不使用它。此外,它可能会泄漏内存,因为您没有正确关闭它

正如我已经说过的,您的代码只是创建了cookie。因此,您需要将创建的cookie发送到客户端。您甚至不需要创建cookie存储,只需创建cookie本身

因此,您需要使用ServletAPI创建一个简单的web应用程序。然后,您可以将创建的cookie附加到所需HTTP请求处理程序中的
HttpServlerResponse
对象。您可以这样做(SpringMVC示例):


实际上,您的代码只是创建了客户端cookie存储,但并没有将创建的cookie发送到任何地方

根据Wikipedia(),“cookie是从网站发送的一小段数据,在用户浏览时存储在用户的web浏览器中。”

HttpClient不是您需要的实体,因为它是客户机,而不是服务器。您可以使用它执行对网站的HTTP请求,但它只是消费者,就像您的本地浏览器一样。因此,即使在客户端上指定cookie存储,也不会对本地浏览器产生影响。服务器(比如说网站)是向客户发送cookies的人

代码中的HttpClient和本地浏览器是两个独立的客户端。他们可以从网站接收cookies,但这两个客户端本身不是网站。这就是为什么
CloseableHttpClient
对象在这里是无用的。此外,在代码中不使用它。此外,它可能会泄漏内存,因为您没有正确关闭它

正如我已经说过的,您的代码只是创建了cookie。因此,您需要将创建的cookie发送到客户端。您甚至不需要创建cookie存储,只需创建cookie本身

因此,您需要使用ServletAPI创建一个简单的web应用程序。然后,您可以将创建的cookie附加到所需HTTP请求处理程序中的
HttpServlerResponse
对象。您可以这样做(SpringMVC示例):


谢谢你的回复。问题是,我使用的是nanohttp(lightwight服务器),谁的cookies没有提供设置路径的方法。这就是我不想使用ServletAPI的原因,我正试图找到一种替代方法来传递Cookies感谢您的回复。问题是,我使用的是nanohttp(lightwight服务器),谁的cookies没有提供设置路径的方法。这就是为什么我不想使用ServletAPI,我正试图找到一种传递cookie的替代方法
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "text/html")
    public String index(HttpServletResponse response) {
        // no prepareCookie implementation here
        Cookie myCookie = prepareCookie();
        response.addCookie(myCookie);
        // view name
        return "index";
    }