Android webview 設置cookie 保持登錄狀態

在項目開發中用webview加載html,用戶在html裏登錄,需求是當用戶殺掉進程重新進入App的時候要保持用戶的登錄狀態,Android 原生的webview是不記錄登錄狀態的,這時候需要我們進入頁面的時候取出cookie,退出的時候在生命週期裏存儲cookie,網上找了很多資料才解決問題,特此記錄一下,具體操作代碼如下:

//獲取cookie 在剛進入頁面的時候,獲取到cookie後通過cookieManager的setCookie設置給webview
public void setCookies(String cookiesPath) {
    Map<String, String> cookieMap = new HashMap<>();
    String cookie = getSharedPreferences("cookie", Context.MODE_PRIVATE).getString("cookies", "");// 從SharedPreferences中獲取整個Cookie串
    if (!TextUtils.isEmpty(cookie)) {
        String[] cookieArray = cookie.split(";");// 多個Cookie是使用分號分隔的
        for (int i = 0; i < cookieArray.length; i++) {
            int position = cookieArray[i].indexOf("=");// 在Cookie中鍵值使用等號分隔
            String cookieName = cookieArray[i].substring(0, position);// 獲取鍵
            String cookieValue = cookieArray[i].substring(position + 1);// 獲取值

            String value = cookieName + "=" + cookieValue;// 鍵值對拼接成 value
            Log.i("cookie", value);
            CookieManager.getInstance().setCookie(getDomain(cookiesPath), value);// 設置 Cookie
        }
    }
}
//退出頁面的時候保存cookie,不僅要在onDestory中寫還要寫再onPause中,點擊home鍵的時候會走onPause的生命週期
@Override
protected void onDestroy() {
    super.onDestroy();
        CookieManager cookieManager = CookieManager.getInstance();
        String cookieStr = cookieManager.getCookie(getDomain(“需要記錄登錄的url”));
        SharedPreferences preferences = getSharedPreferences("cookie", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferences.edit();
        editor.putString("cookies", cookieStr);
        editor.commit();
}

//退出的時候用到的getDomain獲取域名的方法
/**
 * 獲取URL的域名
 */
private String getDomain(String url) {
    url = url.replace("http://", "").replace("https://", "");
    if (url.contains("/")) {
        url = url.substring(0, url.indexOf('/'));
    }
    return url;
}
ok了,下次重新進入的時候就可以保存登錄狀態了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章