在開發(fā)android項(xiàng)目的時(shí)候,遇到了一個(gè)問題喊括,在使用webview加載網(wǎng)頁的時(shí)候,想利用設(shè)置cookie來避免在網(wǎng)頁上還要再次登錄矢棚,但是在設(shè)置了之后郑什,并沒有什么卵用,而且在加載完網(wǎng)頁之后蒲肋,是可以得到網(wǎng)頁的cookie的蘑拯,設(shè)置代碼如下:
/**
* Sync Cookie
*/
private void syncCookie(Context context, String url){
try{
LogUtils.d("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){
LogUtils.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie);
}
cookieManager.setCookie(url,"52xzqnauthcode="+BaseApplication.getInstance().getLoginUser().getToken());
cookieManager.setCookie(url,"domain="+".52xzqn.com");
cookieManager.setCookie(url,"path="+"/");
// cookieManager.setCookie(url,"expires="+"Tue, 18-Apr-2019 18:42:44 GMT");
CookieSyncManager.getInstance().sync();
String newCookie = cookieManager.getCookie(url);
if(newCookie != null){
LogUtils.e("newCookie", newCookie);
}
}catch(Exception e){
LogUtils.e("Nat: webView.syncCookie failed", e.toString());
}
}
后臺總是不能顯示已登錄狀態(tài),協(xié)調(diào)打印出后臺獲取的token兜粘,發(fā)現(xiàn)token中的“+”號變成了空格申窘,所以失敗
解決辦法:
String sendBuf = BaseApplication.getInstance().getLoginUser().getToken().replace("+", "%2B");
cookieManager.setCookie(url,"52xzqnauthcode="+sendBuf);
這樣替換后就大功告成了!?字帷剃法!
注::
1.Cookie頭由客戶端發(fā)送,包含在HTTP請求的頭部中路鹰。注意贷洲,只有cookie的domain和path與請求的URL匹配才會(huì)發(fā)送這個(gè)cookie。
2.在android里面在調(diào)用webView.loadUrl(url)之前一句調(diào)用設(shè)置cookie的方法就可以給WebView設(shè)置Cookie
3.增加請求頭:
//添加請求頭
Map<String, String> extraHeaders;
extraHeaders = new HashMap<String, String>();
extraHeaders.put("Token", BaseApplication.getInstance().getLoginUser().getToken());//標(biāo)識(前面是key晋柱,后面是value)
extraHeaders.put("device", "android");//設(shè)備號(前面是key优构,后面是value)
webview.loadUrl(detailurll, extraHeaders);
4.初始化相關(guān)設(shè)置
/**
* init WebView Settings
* */
private void initWebViewSettings(){
// 設(shè)置可以訪問文件
webview.getSettings().setAllowFileAccess(true);
//如果訪問的頁面中有Javascript,則webview必須設(shè)置支持Javascript
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setAppCacheEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setDatabaseEnabled(true);
}