美文网首页
webview的cookie同步

webview的cookie同步

作者: 一只在时光里流浪的大懒猫 | 来源:发表于2016-12-19 11:24 被阅读0次

http://www.jianshu.com/p/24827940b21a 比较详细的解释,可供参考

实现目的:

将App的登录状态,同步到所嵌入的H5中去。

做法概述:

调用一次后端提供的接口,去H5应用端做一次授权,成功后服务器端保存对应session,并将对应cookie放在请求头中返回,客户端获取cookie,并设置对应的url。

代码示例:

1.发送post请求,获得cookie

接口形式

授权登录:请求接口做一次授权
* 接口地址:xxx
* 提交方式:post
* 提交参数
username
userId
token

使用apache的HttpClient发送网络请求,从返回中获取cookie

// 使用Post发送请求,参数是放在HttpEntity内的
public static String getDataByPost_cookies(String url,Map<String, Object> mapParams) {
        List<NameValuePair> listParams = getParams(mapParams);
        try {
            HttpPost httpPost = new HttpPost(url);
            HttpEntity requestHttpEntity = new UrlEncodedFormEntity(listParams,
                    HTTP.UTF_8); // URL使用基本URL即可,其中不需要加参数
            httpPost.setEntity(requestHttpEntity); // 将含有参数的HttpEntity加入到HttpPost中
            HttpClient httpClient = HttpClientHelper.getNewHttpClient();
            HttpResponse response = httpClient.execute(httpPost); // 发送请求
            if (response.getStatusLine().getStatusCode() == 200) { // 200链接成功,500链接失败
                String strResult = EntityUtils.toString(response.getEntity());
                JSONObject str = new JSONObject(strResult);
                CookieStore cookiestore=((AbstractHttpClient) httpClient).getCookieStore();
                System.out.println("MyHttpUtil:" + str);
                System.out.println("=======cookiestore:" + cookiestore);
                String cookiestr0 = cookiestore.getCookies().get(0).getValue();
                String sessionid0 = cookiestore.getCookies().get(0).getName();
                String cookiestr1 = cookiestore.getCookies().get(1).getValue();
                String sessionid1 = cookiestore.getCookies().get(1).getName();
                String cookiestr2 = cookiestore.getCookies().get(2).getValue();
                String sessionid2 = cookiestore.getCookies().get(2).getName();
                PreferencesManager.getInstance().setUser_cookie01(sessionid0+"="+cookiestr0);
                PreferencesManager.getInstance().setUser_cookie02(sessionid1+"="+cookiestr1);
                PreferencesManager.getInstance().setUser_cookie03(sessionid2+"="+cookiestr2);
                return cookiestore.toString();
            }else{
                String strResult = EntityUtils.toString(response.getEntity());
                JSONObject str = new JSONObject(strResult);
                System.out.println(strResult);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

获取的CookieStore值的形式

[
    [
        version: 0
    ][
        name: request_method
    ][
        value: POST
    ][
        domain: **********
    ][
        path: /
    ][
        expiry: null
    ],
    [
        version: 0
    ][
        name: member_id
    ][
        value: ***********
    ][
        domain:  **********
    ][
        path: /
    ][
        expiry:  **********
    ],
    [
        version: 0
    ][
        name: token
    ][
        value:  **********
    ][
        domain: **********
    ][
        path: /
    ][
        expiry:  **********
    ]
]

2.将cookie同步对应的url

这里,该方法调用三次,原因是CookieStore中含三个,分别是request_method=POSTmember_id=valuetoken= value

    /**
     * 将cookie同步到WebView
     * 
     * @param url
     *            WebView要加载的url
     * @param cookie
     *            要同步的cookie
     * @return true 同步cookie成功,false同步cookie失败
     * @Author JPH
     */
    public static boolean syncCookie(Context context, String url, String cookie) {
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.setCookie(url, cookie);// 如果没有特殊需求,这里只需要将session
                                                // id以"key=value"形式作为cookie即可
        String newCookie = cookieManager.getCookie(url);
        return TextUtils.isEmpty(newCookie) ? false : true;
    }

3.设置成功后,打开对应的URL

  webview_frg = (WebView) view.findViewById(R.id.webview_frg);
  webview_frg.getSettings().setJavaScriptEnabled(true);
  webview_frg.loadUrl(url);

相关文章

网友评论

      本文标题:webview的cookie同步

      本文链接:https://www.haomeiwen.com/subject/fqzzmttx.html