**

Android Webview 设置Cookie问题

**
鄙人嫖二十,菜鸡一个,多多指教。

最近遇到一个比较坑爹的问题就是webview里添加第三方H5页面,但是数据获取不到,经过一天的折磨发现cookie值每次都会变,再根据谷歌开发者模式定位,cookie每次应该都是固定,每次变化说明本地的cookie有问题,或者为空。

webview有一个CookieManager这个类,他是专门管理cookie的,这个类可以设置一个或多个cookie,而且当你在里面设置好cookie以后接口会自动根据你设置时的url来使用。

一共有两种获取cookie的方法一种是HttpURLConnection获取,一种是直接利用CookieManager获取。

第一种根据url利用HttpURLConnection获取接口中的cookie()

/*** 获取接口中的cookie* @param loginUrl*/private void syncCookie(final String loginUrl) {try {StringBuilder builder = new StringBuilder();URL url = null;byte[] data = builder.toString().getBytes("UTF-8");url = new URL(loginUrl);HttpURLConnection connection =(HttpURLConnection) url.openConnection();connection.setDoOutput(true);connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");connection.setRequestProperty("Content-Length",Integer.toString(data.length));connection.setInstanceFollowRedirects(false);connection.setRequestMethod("GET");OutputStream os = connection.getOutputStream();os.write(data);os.close();int aRstCode = connection.getResponseCode();if (aRstCode == HttpURLConnection.HTTP_OK) {cookie = connection.getHeaderField("Set-Cookie");}} catch (MalformedURLException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (ProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

第二种直接利用CookieManager获取

cookieManager.getCookie(url);

这两种返回的cookie是有一些区别的,看你需要哪一种。

设置cookie 允许它跨域

     CookieManager cookieManager = CookieManager.getInstance();cookieManager.setAcceptCookie(true);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {cookieManager.setAcceptThirdPartyCookies(mWebView, true);//TODO 跨域cookie读取Log.d(TAG,"跨域cookie读取");}

把cookie设置道webview里

/***@param cookie 上面获取到的存储在本地的cookie字符串*@param url 要加载的页面url*/@SuppressLint("NewApi")private void setCookie(String cookie, String url) {String StringCookie = cookie;CookieSyncManager.createInstance(this);if (cookieManager == null) {cookieManager = CookieManager.getInstance();}cookieManager.setAcceptFileSchemeCookies(true);cookieManager.setAcceptCookie(true);if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {//这个代码是清楚webview里的所有cookie加不加完全看你自己。cookieManager.removeSessionCookies(null);cookieManager.flush();} else {cookieManager.removeAllCookie();CookieSyncManager.getInstance().sync();}runOnUiThread(new Runnable() {@Overridepublic void run() {cookieManager.setCookie(url, StringCookie, new ValueCallback<Boolean>() {@Overridepublic void onReceiveValue(Boolean aBoolean) {Log.d(TAG,"setCookie() aBoolean:"+aBoolean);}});}});if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {cookieManager.flush();} else {CookieSyncManager.getInstance().sync();}}

注意 注意 注意:重要的事情说三遍有些机型只支持单独设置cookie就比如(瞎写的)
session=jashdkjashdkashdk;path=path
如果你直接把这一整串setCookie进入,是设置不进去的,你需要把他们根据分号切割开,一个一个的给它们设置进去。像这种cookieManager.setCookie(url,“session=jashdkjashdkashdk”)(如果你直接设置进去,并且成功了就当我后面说的是废话)

Android Webview 设置Cookie问题相关推荐

  1. android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题

    Android页面嵌套了一个h5,H5页面内部有用户登陆页面,发现h5页面的登陆功能无法使用,一直登陆失败.和web那边商量一会,发现js写入的cookie丢失了.所有需要Android这边在重写写入 ...

  2. Android WebView设置Cookie

    Android WebView设置Cookie 场景 最近公司项目需求,要求H5可以直接通过cookie得到相关信息 业务场景1: 网页登录:记录用户登录信息,下次进去不需要重复登录 业务场景2: 获 ...

  3. android webview 字体 系统字体大小,【转】android webview设置内容的字体大小

    Enum for specifying the text size. SMALLEST is 50% SMALLER is 75% NORMAL is 100% LARGER is 150% LARG ...

  4. Android webview 写入cookie的解决方法以及一些属性设置

    Android webview 写入cookie的解决方法以及一些属性设置 参考文章: (1)Android webview 写入cookie的解决方法以及一些属性设置 (2)https://www. ...

  5. android webview设置加载进度条

    1.自定义属性文件--attrs.xml <?xml version="1.0" encoding="utf-8"?> <resources& ...

  6. Android webview设置背景透明,去掉白色

    在完全去掉其他控件的颜色基础上,显示的webview依旧还是显示为白色的底,但是在控件上面并没有设置颜色,如下: <WebViewandroid:id="@+id/webview&qu ...

  7. android webview设置分辨率,Android WebView 设置参考

    mWebView.setHorizontalScrollBarEnabled(false);//水平不显示 mWebView.setScrollBarStyle(WebView.SCROLLBARS_ ...

  8. android webview设置行间距,通过webview设置字体的行间距

    有时候可用 UIWebView 代替 UITextView,解决行间距问题 2011-12-10 - Unmi 我们在使用 UILabel 或是 UITextView 时,如果文字出现了换行,目前我还 ...

  9. android webview 设置文字颜色,android webView 修改页面字体颜色

    webview加载一个界面后,在onPageFinished中加入修改页面字体颜色css,如下String nightCode = ""; try { InputStream is ...

  10. 【WebView】关于Android WebView 的一些坑

    整合一下部分处理方式: WebView缓存问题: webview 清除缓存的方式:https://blog.csdn.net/shuijianbaozi/article/details/7949388 ...

最新文章

  1. 分类家族:二分类、多分类、多标签分类、多输出分类
  2. MFC 加入背景图片并让控件背景透明
  3. python ctime源码_Python3基础 getatime getctime getmtime 文件的最近访问 + 属性修改 + 内容修改时间...
  4. AX 2009 时间类型函数操作
  5. 【最近公共祖先】[COCI]STOGOVI
  6. IDEA下搜狗输入法输入中文时卡着不动的参考解决方法
  7. 软件测试工具LoadRunner中如何定义SLA?--转载
  8. 组态档(configuration file)与建构档
  9. Ridge regression
  10. java 汉字乱码_【转】Java中文乱码的解决
  11. 《Java性能优化权威指南》读书笔记
  12. 数字电路中表示频率误差的ppm是什么意思?
  13. 如果已经安装过个人版Delphi2007,如何安装Delphi2007企业版
  14. 通过xhr实现文件上传功能,使用jQuery实现文件上传功能
  15. 你真的会用C语言的fscanf_s吗
  16. Oracle的安装及导入.dmp文件教程
  17. 七牛云CNAME设置,七牛云绑定域名。
  18. 如何快捷一下永久删除电脑文件
  19. maven打包三种方式
  20. Java获取某个字符在指定字符串中出现的第N次的位置

热门文章

  1. FDDB人脸检测测评数据集介绍
  2. java中输出日历_Java:输入年份和月份打印出相应的日历表
  3. python实现最长公共子串
  4. 背单词App-单词播放器10.31版本的原理
  5. 注册github账号详细中文版教程【精选】
  6. 小程序常用的10款框架
  7. Matlab排序函数
  8. 泛微e9隐藏明细表_泛微Ecology权限整理大全,相当全要点
  9. 经济学中VCG机制介绍与机制设计(mechanism design)
  10. 马拉车java_算法-Manacher算法 / 马拉车算法(Java实现)