Android 給WebView設置Cookie


最近項目中用到WebView訪問新浪支付頁面,有個要求是必須是登錄狀態,否則會報Token過期,然后我簡單的將我從cookie中取得的ticket,即一串數字可以代表用戶登錄的唯一標識作為參數拼接到url路徑上,竟然成功了,但是,當在新浪頁面進入第二級界面的時候,還會報Token過期,這才意識到,還是新浪網頁沒有獲取到cookie。
    可是ios也是用的webview訪問的新浪支付,並且沒有設置任何屬性,新浪就可以獲取到cookie。百度了一番,當然如何獲取cookie,自己百度查查吧,我這是已經獲取到cookie之后的操作。注意的是要在WebView.loadUrl()之前調用syncCookie方法:
    public  void syncCookie(Context context, String url) {
        try {
            CookieSyncManager.createInstance(context);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            cookieManager.removeSessionCookie();// 移除
            cookieManager.removeAllCookie();
            //以下是我們在請求中獲取到的cookie相關信息,然后存到本地,你需要做的就是 將自己的cookie 中的信息分別取出來 如:
//            cookie0: SFFGDFEID=0F7AE910509938FE024D6F94CB882DCA
//            cookie1: Domain=.dotyre.cn
//            cookie3:  Expires=Sat, 12-Aug-2017 05:41:47 GMT
//            cookie4:  Path=/
            String cookie = SharedPreferencesUtils.getString(context, "cookie0");
            String domain = SharedPreferencesUtils.getString(context, "cookie1");
            String path = SharedPreferencesUtils.getString(context, "cookie4");
            //然后分別拼到StringBuilder 上,然后通過cookieManager.setCookie(url, cookieValue);最后再進行同步,Cook//ieSyncManager.getInstance().sync();
            StringBuilder sbCookie = new StringBuilder();
            sbCookie.append(cookie);
            //       sbCookie.append(String.format(";domain=%s", domain));
            //       sbCookie.append(String.format(";path=%s", path));
            sbCookie.append(";"+domain);
            sbCookie.append(";"+path);
            String cookieValue = sbCookie.toString();
            Log.e("==cookieValue==", cookieValue);
            cookieManager.setCookie(url, cookieValue);
            CookieSyncManager.getInstance().sync();
        } catch (Exception e) {
            Log.e("==異常==", e.toString());
        }
    }
    另外提供一個工具類:
            package com.hibo.bm.utils;
    import android.content.Context;
    import android.os.Build;
    import android.util.Log;
    import android.webkit.CookieManager;
    import android.webkit.CookieSyncManager;
    import android.webkit.WebView;
    import com.hibo.bm.url.AppUrl;
    import org.xutils.http.cookie.DbCookieStore;
    import java.net.HttpCookie;
    import java.util.List;
    /**
     * Created by 李志強 on 2016/8/12.
     */
    public class CookieHelper {
        /**
         * clear Cookie
         *
         * @param context
         */
        public static void clearCookie(Context context) {
            CookieSyncManager.createInstance(context);
            CookieSyncManager.getInstance().startSync();
            CookieManager.getInstance().removeSessionCookie();
        }
        /**
         * Sync Cookie
         */
        public static void syncCookie(Context context, String url) {
            try {
                CookieSyncManager.createInstance(context);
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.setAcceptCookie(true);
                cookieManager.removeSessionCookie();// 移除
                cookieManager.removeAllCookie();
//                String cookie = SPUtil.getParam(context, "cookie", "");
//                String domain = SPUtil.getParam(context, "domain", "");
//                String path = SPUtil.getParam(context, "path", "");
                String cookie = SharedPreferencesUtils.getString(context, "cookie0");//從cookie里取出的值就是ticket
                String domain = SharedPreferencesUtils.getString(context, "cookie1");//domain
                String path = SharedPreferencesUtils.getString(context, "cookie4");//path
                StringBuilder sbCookie = new StringBuilder();
                sbCookie.append(cookie);
                sbCookie.append(";"+domain);
                sbCookie.append(";"+path);
                String cookieValue = sbCookie.toString();
                Log.e("==cookieValue==", cookieValue);
                cookieManager.setCookie(url, cookieValue);
                CookieSyncManager.getInstance().sync();
            } catch (Exception e) {
                Log.e("==異常==", e.toString());
            }
        }




        /**
         * save cookie
         * @param context
         */
        public static void saveCookie(Context context){
            DbCookieStore instance = DbCookieStore.INSTANCE;
            List<HttpCookie> cookies = instance.getCookies();
            String cookie = "";
            for(int i=0;i<cookies.size();i++){
                if(cookies.get(i).toString().startsWith("JSESSIONID")){
                    cookie = cookies.get(i).toString();
                    Log.e("==cookies==",cookies.toString());
                    Log.e("==cookie==",cookie);
                    Log.e("==domain==", cookies.get(i).getDomain());
                    Log.e("==path==", cookies.get(i).getPath());
                    //保存cookie
                    SPUtil.setParam(context, "cookie", cookie);
                    SPUtil.setParam(context, "domain", cookies.get(i).getDomain());
                    SPUtil.setParam(context, "path", cookies.get(i).getPath());
                }
            }


        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM