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();

}

相关推荐