1. 程式人生 > >android webview 設定 Cookie

android webview 設定 Cookie

   一般用webview的時候都不會考慮Cookie問題,但是某些需求考慮到使用者登入問題,所以就得考慮給webview設定Cookie.

   我用的實現方式是將Cookie存放到 HashMap 並 儲存到 SharedPreferences,然後再需要使用到的地方取出來使用

//儲存Cookie部分程式碼
 private static Map<String, String> cookieStore = new HashMap<String, String>();
 private static DefaultHttpClient httpClient = new
DefaultHttpClient(); HttpResponse httpResponse = httpClient.execute(request); // 得到響應的字串 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { CookieStore cks = httpClient.getCookieStore(); List<Cookie> cs = cks.getCookies();//
獲取遠端cookie boolean flag = false;// 是否更新cookie檔案 if (cs != null) { for (Cookie cookie : cs) { String name = cookie.getName(); String val = cookie.getValue(); String cacheVal
= cookieStore.get(name); if (!val.equals(cacheVal)) {// 本地cookie與遠端cookie不同步,則覆蓋本地cookie flag = true; cookieStore.put(name, val);// 更新記憶體中的cookie cookieStore.put("Path", cookie.getPath()); cookieStore.put("Domain", cookie.getDomain()); // cookieStore.put("Comment", cookie.getComment()); // cookieStore.put("Ports", // String.valueOf(cookie.getPorts())); // cookieStore.put("CommentURL", // cookie.getCommentURL()); continue; } } } SharedPreferences sp = getSharedPreferences(mContext, SP_COOKIES); Editor ed = sp.edit(); if (cookieStore != null) { Set<String> keys = cookieStore.keySet(); for (String key : keys) { ed.putString(key, cookieStore.get(key)); } } ed.commit();

在webview 上載入loadUrl(url)前加入如下程式碼
        CookieSyncManager.createInstance(CarServiceActivity.this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);

        Map<String, String> cookies = (Map<String, String>) Util.getInstance().getCookiesFromFile(
                CarServiceActivity.this);
        String Domain = null;
        String path = null;
        // 得到Domain 和 Path
        for (String key : cookies.keySet()) {
            if (key.equalsIgnoreCase("Domain")) {
                Domain = cookies.get(key);
            } else if (key.equalsIgnoreCase("Path")) {
                path = cookies.get(key);
            }
        }
//拼接成想要格式
for (String key : cookies.keySet()) { if (!key.equals("Domain") && !key.equals("Path")) { String value = cookies.get(key); StringBuilder sb = new StringBuilder(); sb.append(key + "=" + value + ";"); sb.append("domain=" + Domain + ";" + "path=" + path); cookieManager.setCookie(Constant.URL_JCHD, sb.toString()); sb = null; } } String cookieString = cookieManager.getCookie(Constant.URL_JCHD); CookieSyncManager.getInstance().sync(); }

   這裡要注意一個問題就是,如果你的cookie上只有一個鍵值對,那麼你只需要設定一次setCookie(url,cookieContent)就OK,但是如果你需要在多個鍵值對,比如除了sessionID,還需要裝置號資訊(用於判斷單點登入),那麼你就需要多次設定setCookie,並且注意cookieContent格式。具體參考 http://kinbos.blog.51cto.com/2092114/1347859  

我這裡格式是 “key=value;domain=domainContent;path=pathContent”

一開始我這裡寫成:

// String cookie1 = "JSESSIONID=" + Constant.sessionId +
// ";signCiphertext=" + Constant.signCiphertext +
// ";type=" + Constant.SREQUESTTYPE +
// ";pcbVersion=" + Constant.PCB_VERSION +
// ";deviceKey="+Constant.deviceKey +
// ";domain=" + Constant.domain +
// ";path=" + "/pcb/"; 

但是伺服器只獲得了 "JSESSIONID=" + Constant.sessionId 這個Cookie 內容,其他的COOKIE內容都丟失了,這是因為 CookieManager 只能夠得 “;” 前的部分。 

相關推薦

Android webview設定cookiecookie丟失問題

Android頁面嵌套了一個h5,H5頁面內部有使用者登陸頁面,發現h5頁面的登陸功能無法使用,一直登陸失敗。和web那邊商量一會,發現js寫入的cookie丟失了。所有需要Android這邊在重寫寫入一次。 mWebView = view.findViewById(R

android webview 設定 Cookie

   一般用webview的時候都不會考慮Cookie問題,但是某些需求考慮到使用者登入問題,所以就得考慮給webview設定Cookie.    我用的實現方式是將Cookie存放到 HashMap 並 儲存到 SharedPreferences,然後再需要使用到的地方取出來使用 //儲存C

Android WebView設定cookie

Android中WebView載入網頁,有時候需要通過cookie想網頁傳遞資訊,這時候這樣操作。 首先設定接收cookie: CookieManager.setAcceptFileSchemeCookies(true); CookieManager.getInstanc

Android webview 設定cookie 保持登入狀態

在專案開發中用webview載入html,使用者在html裡登入,需求是當用戶殺掉程序重新進入App的時候要保持使用者的登入狀態,Android 原生的webview是不記錄登入狀態的,這時候需要我們進入頁面的時候取出cookie,退出的時候在生命週期裡儲存cookie,網

AndroidWebView設定Cookie

在網上搜索給WebView設定Cookie這個問題得到的回答都是以下這段程式碼: CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.

android 通過設定cookie解決app 登入後WebView還要重新登陸問題

問題描述:因為需要在app里加入html,所以使用了webView,但是第一次進入webview時,需要在webview頁面重新登陸,為了解決這一問題花了大量的時間,所以分享給遇到問題的朋友們。 入下的方法是通過設定cookie來解決 在 webView.l

android WebView設定最大高度

當我們在dialog中嵌入webview來顯示網頁資訊時,如果網頁內容足夠長,則會出現dialog高度被撐滿屏,但是介於美觀問題,我們會試圖動態設定webview的最大高度,可是遺憾的是,谷歌並沒有給我們提供這個方法,聰明人想出了聰明的辦法,具體請看下面程式碼: publ

android webview設定自適應任意大小的pc網頁

WebSettings webSettings = view.getSettings(); webSettings.setJavaScriptEnabled(true); // User settings webSe

Android WebViewcookie第一次載入不工作的問題的解決

 今天遇到一個問題,在使用WebView載入一個網頁時,當用戶點選一個需要登陸的按鈕時,就跳到自己做的登入頁面,登陸成功以後,就同步WebView,相當於WebView也登入了,但是,等登陸成功以後,重新載入頁面發現還是沒有登陸,要退出這個activity再進入才顯示已經

Android WebView獲取cookie

重寫WebViewClient方法 public class MyWebViewClient extends WebViewClient { public boolean shouldOv

webView設定Cookie

我們在android中訪問網路經常會用到Apache的HttpClient,用此類去訪問網路獲取資料, 但是在寫android介面的時候又時不時的會用到一些WebView元件,這時候訪問一個以經登入的頁面的時候cookie設定就有個問題 在HttpCli

android webview 設定背景透明色

android WebView 設定背景色為透明色 在網上找了好多的方法都試過了都不行 1.直接設定成background 為透明色或者透明圖片(無效) android:background="@android:color/transparent" 2.設

android webview 儲存cookie

在用webview登陸某網站web客戶端時,需要儲存cookie,這樣退出再進入時就不用二次登陸,android使用webview解決Cookie問題的方法是———————————————— public class WebClientActivity extends Ac

android webview設定縮放按鈕時候無法顯示問題

 //支援縮放  webSettings.setSupportZoom(true);  // 縮放按鈕  webSettings.setBuiltInZoomControls(true); 在webview中,設定了顯示縮放按鈕(放大縮小),但是發現有的頁面能顯示,有的頁面

androidWebview設定多個cookie引數

有時候需要在cookie中設定多個引數傳遞給前端頁面,常用的是 token和渠道號 。將N個引數的key-value按照分號分開然後一次設定,一直只使用token第一個引數,可以正常獲取,所以沒問題,比如 StringBuilder sbCookie = n

android webview設定cookie

我們在android中訪問網路經常會用到Apache的HttpClient,用此類去訪問網路獲取資料, 但是在寫android介面的時候又時不時的會用到一些WebView元件,這時候訪問一個以經登入的頁面的時候cookie設定就有個問題 在HttpClient中儲存下來的C

android-Webview設定多個cookie,實現webview中儲存登入資訊

方法:通過重複呼叫 cookieManager.setCookie(url,cookie1); 來儲存多個cookie。 程式碼: /** * Sync Cookie */ private void syncCookie(Context

Android WebView Cookie的相關設定和自定義錯誤頁面載入

這個是WebView的後篇吧,一拖又不知道拖了多久了,言歸正傳,上一次大概翻譯了一些WebView的官方介紹,然後剩下了WebView的Cookie相關另外就是載入頁面錯誤那個醜醜的頁面的處理。 內容簡介: WebView Cookie的相關使用! 錯誤頁

Androidwebview設定cookie,部分cookie失效的問題

app主頁的頁面都是web開發的,只有登入頁是原生的,這就需要Android在呼叫了登入介面併成功後,把登入資訊作為cookie存起來。 網上有存cookie的方法: public void cookie(Context context,String url,String

android中okhttp與webviewcookie共享

轉載請註明出處:https://blog.csdn.net/u011038298/article/details/84551136   1.在WebView中同步cookie import android.os.Build; import android.text.Text