sesion在浏览器和web服务器直接是通过一个叫做name为sessionid的cookie来传递的,所以只要在每次数据请求时保持sessionid是同一个不变就可以用到web的session了,做法是第一次数据请求时就获取sessionid的值并保存在一个静态变量中,然后在第二次请求数据的时候要将这个sessionid一并放在Cookie中发给服务器,服务器则是通过这个sessionid来识别究竟是那个客户端在请求数据的,这个sessionid的名字叫做JSESSIONID。下面贴下代码
HttpPost httpPost = new HttpPost(url);
// httpPost.addHeader("Content-Type", "application/json");
// httpPost.addHeader("User-Agent", "imgfornote");
httpPost.setEntity(new UrlEncodedFormEntity(postDate, "utf-8"));
System.out.println("JSESSIONID:"+JSESSIONID);
if (null != JSESSIONID) {
httpPost.setHeader("Cookie", "JSESSIONID=" + JSESSIONID);
}
// 缓存的处理
if (cacheType == cache_none) {// 一直不使用缓存
httpResponse = httpClient.execute(httpPost);
if (isHttpSuccessExecuted(httpResponse)) {
String result = EntityUtils.toString(
httpResponse.getEntity(), "utf-8");
//获得sessionID
CookieStore mCookieStore = ((AbstractHttpClient) httpClient).getCookieStore();
List<Cookie> cookies = mCookieStore.getCookies();
for (int i = 0; i < cookies.size(); i++) {
// 这里是读取Cookie['JSESSIONID']的值存在静态变量中,保证每次都是同一个值
if ("JSESSIONID".equals(cookies.get(i).getName())) {
JSESSIONID = cookies.get(i).getValue();
System.out.println("cookies:JSESSIONID:"+JSESSIONID);
break;
}
}
if (isCallBack) {
if (this.listener != null) {
TNTHttpRequestCallBackListener istener = this.listener;
istener.OperatingData(result);
}
this.sendMessage(result);
}
} else {
this.sendErrorMessage(httpResponse.getStatusLine()
.getStatusCode() + "");
}
}