说明:
服务器网页要通过网页的Cookie得到客户端的登陆状态,必须客户端给网页Cookie设置值,这样服务端才能得到Cookie的值。
步骤:
1、WebView里面必须设置属性:
// 设置可以访问文件 myWebView.getSettings().setAllowFileAccess(true); //如果访问的页面中有Javascript,则webview必须设置支持Javascript myWebView.getSettings().setJavaScriptEnabled(true); //myWebView.getSettings().setUserAgentString(MyApplication.getUserAgent()); myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); myWebView.getSettings().setAllowFileAccess(true); myWebView.getSettings().setAppCacheEnabled(true); myWebView.getSettings().setDomStorageEnabled(true); myWebView.getSettings().setDatabaseEnabled(true);
2、调用
在加载url之前一定要设置cookie
syncCookie(this, url, token);
wvShow.loadUrl(url);//get请求
3、设置Cookie
/** * Sync Cookie */ private void syncCookie(Context context, String url){ try{ Log.d("Nat: webView.syncCookie.url", url); CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); //cookieManager.removeSessionCookie();// 移除 //cookieManager.removeAllCookie();//清除所有cookie //log String oldCookie = cookieManager.getCookie(url); if(oldCookie != null){ Log.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie); } //cookie参数 - 通过Builder形式(用这种方式,就不要用下面的-单独形式-了) StringBuilder sbCookie = new StringBuilder(); sbCookie.append(String.format("JSESSIONID=%s","sid")); sbCookie.append(String.format(";access_token=%s", "stoken")); String cookieValue = sbCookie.toString(); cookieManager.setCookie(url, cookieValue); //cookie参数 - 单独形式(用这种方式,就不要用上面-Builder形式-了) cookieManager.setCookie(url, "JSESSIONID=" + sid);//和后台约定好的sid字段 cookieManager.setCookie(url, "access_token=" + stoken);//和后台约定的好的token字段 //最后一定要调用 CookieSyncManager.getInstance().sync(); //log String newCookie = cookieManager.getCookie(url); if(newCookie != null){ Log.d("Nat: webView.syncCookie.newCookie", newCookie); } }catch(Exception e){ Log.e("Nat: webView.syncCookie failed", e.toString()); } }
注释:
把约定好的字段放进cookie里面,网页可以在打开的时候,让网页弹出自己取出的cookie的字段来显示是否传递成功。