WebView同步App登陆后获取到的Cookie

.开发中遇到的同步Cookie
在客户端登录后,获取cookie,我使用的是Volly框架,所以Volly获取Cookie的方法如下:
    
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
try {
Map<String, String> responseHeaders = response. headers;
String rawCookies = responseHeaders.get( "Set-Cookie");
SharePrefUtil. saveUserString( context, "Cookie",rawCookies);
ShowLog. Show( "这个是cookie"+rawCookies);
String dataString = new String(response. data, "UTF-8");
return Response. success(dataString, HttpHeaderParser. parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response. error( newParseError(e));
}
}
 
String rawCookies = responseHeaders.get("Set-Cookie");
这句是重点。有些文档说需要上传整串Cookie,其实这个说法不妥当,在传统的HttpClient中的确需要上传一串List集合来同步,

参考:

-------》http://blog.csdn.net/xiaozhiwz/article/details/46459555

----------------------------------------------------------------------万恶的分割线--------------------------------------------------
在WebView中,直接设置同步
   
/**
* Sync Cookie
*/
private void syncCookie(Context context, String url){
try{
ShowLog. Show( "Nat: webView.syncCookie.url"+ url);
CookieSyncManager. createInstance(context);
CookieManager cookieManager = CookieManager. getInstance();
cookieManager.setAcceptCookie( true);
cookieManager.removeSessionCookie(); // 移除
cookieManager.removeAllCookie();
String oldCookie = cookieManager.getCookie(url);
if(oldCookie != null){
ShowLog. Show( "Nat: webView.syncCookieOutter.oldCookie"+oldCookie);
}
//sbCookie 是从HttpClient 获取的
StringBuilder sbCookie = new StringBuilder();
sbCookie.append(String. format( "JSESSIONID=%s", "INPUT YOUR JSESSIONID STRING"));
sbCookie.append(String. format( ";domain=%s", "INPUT YOUR DOMAIN STRING"));
sbCookie.append(String. format( ";path=%s", "INPUT YOUR PATH STRING"));
String cookieValue = sbCookie.toString();
String cookieValues = SharePrefUtil. getUserString(context, "Cookie", "");
ShowLog. Show( "这个是WwebView获取的Cookie"+cookieValues);
cookieManager.setCookie(url, cookieValues);
CookieSyncManager. getInstance().sync();
String newCookie = cookieManager.getCookie(url);
if(newCookie != null){
     ShowLog. Show( "webView.syncCookie.newCookie"+newCookie);
}
} catch(Exception e){
    ShowLog. Show( "Nat: webView.syncCookie failed"+e.toString());
}
}
到这里设置都差不多了。
这里需要着重记住一点,给WebSetting  设置权限
// 设置可以访问文件
WebSettings settings = wv.getSettings();
settings.setAllowFileAccess( true);
//如果访问的页面中有Javascript,则webview必须设置支持Javascript
settings.setJavaScriptEnabled( true);
settings.setCacheMode(WebSettings. LOAD_NO_CACHE);
settings.setAllowFileAccess( true);
settings.setAppCacheEnabled( true);
settings.setDomStorageEnabled( true);
settings.setDatabaseEnabled( true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm. SINGLE_COLUMN);
settings.setBuiltInZoomControls( false); // 设置显示缩放按钮
settings.setSupportZoom( false); // 支持缩放
settings.setJavaScriptEnabled( true);
settings.setJavaScriptCanOpenWindowsAutomatically( true);
 -----------------------------------------------------------------------------------------------------------------

最后一点,同步cookie需要在loadUrl之前。就是在设置syncCookie()之前再loadUrl,才能有效。好了,搞定!!!!!可以同步登陆状态到WebView了。

有什么疑问,欢迎交流

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值