android webview httpdefaultclient cookie共享
转自:http://shine.sinaapp.com/?post=126
android开始项目中,通常会遇到既使用HttpClient,又使用WebView的情况。一个典型的例子是,使用HttpClient登录,WebView展示登录后的某些页面,这个时候,如果直接不加任何处理的话会发现在使用WebView展示的时候,会提示没有登录你的应用系统,造成这种结果的原因就是使用HttpClient登录的session和WebView访问服务器的session并不是同一个,解决办法如下。
HttpClient登录代码如下
DefaultHttpClientclient=newDefaultHttpClient();
HttpGetget=newHttpGet(url);
HttpContextcontext=newBasicHttpContext();
CookieStorecookieStore=newBasicCookieStore();
context.setAttribute(ClientContext.COOKIE_STORE,cookieStore);
HttpResponseresponse=client.execute(get,context);
if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){
//根据你的逻辑,判断返回的值是不是表示已经登录成功
if(isLoginSuccess()){
Listcookies=cookieStore.getCookies();
if(!cookies.isEmpty()){
for(inti=cookies.size();i>0;i--){
Cookiecookie=cookies.get(i-1);
if(cookie.getName().equalsIgnoreCase("jsessionid")){
//使用一个常量来保存这个cookie,用于做session共享之用
Utils.appCookie=cookie;
}
}
}
}
}
WebView代码
Stringurl4load="登录域名下你要访问的地址";
CookieSyncManager.createInstance(this);
CookieManagercookieManager=CookieManager.getInstance();
CookiesessionCookie=Utils.appCookie;
if(sessionCookie!=null){
StringcookieString=sessionCookie.getName()+"="+sessionCookie.getValue()+";domain="+sessionCookie.getDomain();
cookieManager.setCookie(url4Load,cookieString);
CookieSyncManager.getInstance().sync();
}