之前曾经写过一篇文章介绍与web服务器的http数据交互方式实现。
这篇文章主要总结博主在开发过程中遇到的问题,做笔记以备翻阅
开发遇到的问题:
1之前使用webservices接口的方式与web通信
可实现数据的获取,能简单通过参数传递的方式与web数据简单交互,但涉及request的业务流程无法正常执行(现有的web服务器,内部业务流程多通过request传递)
2使用http与web通讯,数据同样通过参数传递,基本实现大部分功能,在业务流程方面貌似同样遇到了阻力,最终查到原因:缺少session中必要的信息
需要解决的问题,如何保证session在移动端跟web服务器端保持一致
度娘一查资料一大堆:
针对目前项目具体应用 提出问题:如何保持xutils框架下session保持
进入正题:
以登录为例:
获取sessionid并保存
private void login() {
String uploadHost = "http://10.1.11.90:8080/BCVNTest";
RequestParams params = new RequestParams();
// params.setHeader("Cookie", "seesionid");
params.addQueryStringParameter("method", "login");
params.addQueryStringParameter("username", "test");
params.addQueryStringParameter("password", "123456");
uploadMethod(params, uploadHost);
}
private void uploadMethod(final RequestParams params, final String uploadHost) {
http.send(HttpMethod.POST, uploadHost, params, new RequestCallBack<String>() {
@Override
public void onStart() {
msgTextview.setText("conn...");
}
@Override
public void onLoading(long total, long current, boolean isUploading) {
if (isUploading) {
msgTextview.setText("upload: " + current + "/" + total);
} else {
msgTextview.setText("reply: " + current + "/" + total);
}
}
@SuppressLint("NewApi")
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
msgTextview.setText("reply: " + responseInfo.result);
Log.v(TAG, "sfq->>:" + responseInfo.result);
DefaultHttpClient dh = (DefaultHttpClient) http.getHttpClient();
//保存cookies的实例
MyCookieStore.cookieStore = dh.getCookieStore();
//获取web反馈回来的cookie信息,主要是为了提取其中sessionid
Log.v(TAG, "sfq->>cookieStore:" + MyCookieStore.cookieStore);
CookieStore cs = dh.getCookieStore();
List<Cookie> cookies = cs.getCookies();
String aa = null;
for (int i = 0; i < cookies.size(); i++) {
if ("JSESSIONID".equals(cookies.get(i).getName())) {
aa = cookies.get(i).getValue();
break;
}
}
Log.v(TAG, "sfq--->>>sessionId:" + aa);
}
@Override
public void onFailure(HttpException error, String msg) {
msgTextview.setText(error.getExceptionCode() + ":" + msg);
}
});
}
public class MyCookieStore {
public static org.a pache.http.client.CookieStore cookieStore=null;
}
以上会在登录方法中调用,目的是实现登录功能并获取sessionid,接下来的web交互操作都需要加上一句:http.configCookieStore(MyCookieStore.cookieStore);目的在于将sessionId传递给web,web自动的接受这个id并通过自己的一套机制查找该id对应的登录session,那么服务器就知道了到底是哪个用户在向自己请求数据,自己应该将数据发送给谁。。。。。
登录以后再次执行post方法时的关键+++++++++
HttpUtils http = new HttpUtils();
http.configCookieStore(MyCookieStore.cookieStore);