webview 设置cookie

在开发android项目的时候,遇到了一个问题,在使用webview加载网页的时候,想利用设置cookie来避免在网页上还要再次登录,但是在设置了之后,并没有什么卵用,而且在加载完网页之后,是可以得到网页的cookie的,设置代码如下:

  /**
     * Sync Cookie
     */
    private void syncCookie(Context context, String url){
        try{
            LogUtils.d("Nat: webView.syncCookie.url", url);
            CookieSyncManager.createInstance(context);
            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
//            cookieManager.removeSessionCookie();// 移除
//            cookieManager.removeAllCookie();
            String oldCookie = cookieManager.getCookie(url);
            if(oldCookie != null){
                LogUtils.d("Nat: webView.syncCookieOutter.oldCookie", oldCookie);
            }
       cookieManager.setCookie(url,"52xzqnauthcode="+BaseApplication.getInstance().getLoginUser().getToken());
            cookieManager.setCookie(url,"domain="+".52xzqn.com");
            cookieManager.setCookie(url,"path="+"/");
//            cookieManager.setCookie(url,"expires="+"Tue, 18-Apr-2019 18:42:44 GMT");
            CookieSyncManager.getInstance().sync();
            String newCookie = cookieManager.getCookie(url);
            if(newCookie != null){
                LogUtils.e("newCookie", newCookie);
            }
        }catch(Exception e){
            LogUtils.e("Nat: webView.syncCookie failed", e.toString());
        }
    }

后台总是不能显示已登录状态,协调打印出后台获取的token,发现token中的“+”号变成了空格,所以失败
解决办法:

 String sendBuf = BaseApplication.getInstance().getLoginUser().getToken().replace("+", "%2B");
            cookieManager.setCookie(url,"52xzqnauthcode="+sendBuf);

这样替换后就大功告成了!!!

注::

1.Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。

2.在android里面在调用webView.loadUrl(url)之前一句调用设置cookie的方法就可以给WebView设置Cookie

3.增加请求头:

       //添加请求头
        Map<String, String> extraHeaders;
        extraHeaders = new HashMap<String, String>();
        extraHeaders.put("Token", BaseApplication.getInstance().getLoginUser().getToken());//标识(前面是key,后面是value)
        extraHeaders.put("device", "android");//设备号(前面是key,后面是value)
        webview.loadUrl(detailurll, extraHeaders);

4.初始化相关设置

   /**
     * init WebView Settings
     * */
    private void initWebViewSettings(){
        // 设置可以访问文件
        webview.getSettings().setAllowFileAccess(true);
        //如果访问的页面中有Javascript,则webview必须设置支持Javascript
        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webview.getSettings().setAllowFileAccess(true);
        webview.getSettings().setAppCacheEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.getSettings().setDatabaseEnabled(true);
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,794评论 25 709
  • 引言:网页需要设置登录状态等情形。开发使用过程中自我经验简单记录。时间:2017年03月13日20:53:12作者...
    JustDo23阅读 36,193评论 2 16
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,608评论 0 17
  • 项目中native和H5的交互免不了需要在webview里面设置Cookie,方法如下: private void...
    砺剑锋成阅读 1,816评论 0 0
  • 一只老鹰,对宝贝小鹰宠爱有加,小鹰一生下来,就一直将它驮在背上,而小鹰也乐得清闲自在,从来没有张开过自己的翅膀,更...
    万伊刀阅读 308评论 0 1