【发布时间】:2014-11-10 13:16:32
【问题描述】:
关于 Cookie 类的文档中写道:“Cookie,HTTP “magic-cookie”表示 HTTP 代理和目标服务器可以交换以维持会话的一条状态信息。”但是如何使用这个魔法呢?有谁能告诉?具体来说,我想使用 cookie 来维护浏览器端的会话。怎么做?
【问题讨论】:
关于 Cookie 类的文档中写道:“Cookie,HTTP “magic-cookie”表示 HTTP 代理和目标服务器可以交换以维持会话的一条状态信息。”但是如何使用这个魔法呢?有谁能告诉?具体来说,我想使用 cookie 来维护浏览器端的会话。怎么做?
【问题讨论】:
尝试下面的代码来维护 cookie,它对我来说工作正常:-
CookieStore cookieStore = new BasicCookieStore();
// Create local HTTP context
HttpClientContext localContext = HttpClientContext.create();
// Bind custom cookie store to the local context
localContext.setCookieStore(cookieStore);
HttpGet httpget = new HttpGet("http://localhost/");
System.out.println("Executing request " + httpget.getRequestLine());
// Pass local context as a parameter
CloseableHttpResponse response = httpclient.execute(httpget, localContext);
try {
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
List<Cookie> cookies = cookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
System.out.println("Local cookie: " + cookies.get(i));
}
EntityUtils.consume(response.getEntity());
} finally {
response.close();
}
【讨论】:
从 Http 请求中得到响应后,只需添加以下代码:
public static List<Cookie> cookies;
try {
cookies = httpclient.getCookieStore().getCookies();
sync();
} catch (Exception e) {
}
//Sync Method:
public void sync() {
if (cookies != null) {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
for (Cookie cookie : cookies) {
Cookie sessionInfo = cookie;
String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain();
cookieManager.setCookie(YOUR DOMAIN, cookieString);
CookieSyncManager.getInstance().sync();
}
}
}
【讨论】: