Apache Http Components - 设置cookie

时间:2016-03-06 19:17:50

标签: java apache http cookies

我正在使用Apache Http Components为localhost设置cookie。当我返回cookie时,我得到了输出:

@project = current_user.projects.build(project_params)

这让我觉得已经设置了cookie,但是当我检查chrome以查看它是否在chrome:// settings / cookies中时,那里什么都没有。

[version: 0][name: testCookie][value: test][domain: http://localhost:9090/][path: /][expiry: Mon Aug 07 19:11:56 BST 2017]

我已经被困在这几个小时了,我无法弄清楚它为什么没有存储在浏览器中

1 个答案:

答案 0 :(得分:0)

实际上,您的代码只是创建客户端cookie存储,但不会在任何地方发送创建的cookie。

根据维基百科(https://en.wikipedia.org/wiki/HTTP_cookie),“cookie是网站发送的一小段数据,存储在用户浏览时的用户网页浏览器中。”

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