Java ApacheHTTP组件-设置cookie
我正在使用ApacheHTTP组件为localhost设置cookie。当我返回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 那里什么都没有
[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";
}