繁体   English   中英

Apache Http组件-设置cookie

[英]Apache Http Components - setting cookie

我正在使用Apache Http Components为本地主机设置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( https://en.wikipedia.org/wiki/HTTP_cookie )的说法,“ cookie是从网站发送的一小段数据,并在用户浏览时存储在用户的Web浏览器中。”

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

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

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

因此,您需要使用Servlet API创建一个简单的Web应用程序。 然后,您可以将创建的cookie附加到所需HTTP请求处理程序中的HttpServlerResponse对象。 您可以执行以下操作(SpringMVC示例):

@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";
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM