zoukankan      html  css  js  c++  java
  • 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());
                    }
                }
    
    
            }
        }
  • 相关阅读:
    QQ空间爬虫--获取好友信息
    分层最短路-2018南京网赛L
    安装SSH,配置SSH无密码登陆
    树形DP--求树上任意两点间距离和
    JTS基本概念和使用
    odps编写UDF的实现
    oozie安装总结
    同步工具的选择
    转:hive面试题
    转:hive-列转行和行转列
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/7472460.html
Copyright © 2011-2022 走看看