我正在使用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]
我已经被困在这几个小时了,我无法弄清楚它为什么没有存储在浏览器中
答案 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";
}