最近项目中用到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=;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());
}
} }
}

Android 给WebView设置Cookie的更多相关文章

  1. 关于android webview 设置cookie的问题

    转自:http://blog.csdn.net/encienqi/article/details/7912733 我们在android中访问网络经常会用到Apache的HttpClient,用此类去访 ...

  2. android webview里获取和设置cookie

    private class MyWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebVie ...

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

    原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...

  4. Android webview中cookie增加/修改

    最近项目需求中,需要满足往webview传递cookie,而且cookie需要增加修改: public class MainActivity extends Activity { private We ...

  5. Android 应用内HttpClient 与 WebView 共享 Cookie

    DefaultHttpClient httpclient=....; String toUrl="https://cap.cityu.edu.hk/studentlan/details.as ...

  6. android webview带cookie访问url

    问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...

  7. [Android] 使用Webview进行OAUTH

    1. 源起     最近在弄Google登录,Google登录要求手机上必须按照Google Play Service,有些手机比如小米,没有Google Play Servcie,因此,有必要实现一 ...

  8. Android之webview详解

    文章大纲 一.webview基本介绍1.什么是webview2.为什么要使用webview3.webview基本操作 二.webview高级使用1.WebView状态2.资源加载3.WebView加载 ...

  9. 转:【WebView的cookie机制 】轻松搞定WebView cookie同步问题

    原文链接:http://blog.csdn.net/fengyuzhengfan/article/details/51517622 在进行APP+H5混合开发的时候,一些功能是用native方法实现的 ...

随机推荐

  1. spring boot的项目结构问题

    问题:spring boot项目能够正常启动,但是在浏览器访问的时候会遇到404的错误,Whitelable Error Page 404 分析及解决方案:首先Application文件要放在项目的外 ...

  2. 移动端的0.5px

    最近写移动端页面写的比较多,边边基本上都是用的1px,视觉上也确实有点小粗,这不闲下来啦,具体的研究了下0.5px是怎么实现的,切记,这个效果只有在手机上才能看到效果的 利用了css3的缩放效果 &l ...

  3. css常用代码大全以及css兼容(转载)

    css常见的快捷开发代码汇总(长期更新),包括CSS3代码,有一些css效果很顽固,经常会一时找不出解决方案,网络上也有很多的工具和高手提供了具体的浏览器兼容代码,这个页面我今后会经常整理,希望能够帮 ...

  4. vc++实例创建简单窗体

    #include<windows.h>#include<stdio.h>LRESULT CALLBACK WinSunProc(HWND hwnd,UINT uMsg,WPAR ...

  5. 推荐一款能支持国密SM2浏览器——密信浏览器

    密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净. ...

  6. yum 安装nginx(配置开机启动)

    yum install -y nginx 通过yum安装的时候提示下面的错误 [root@localhost yum.repos.d]# yum install nginx 已加载插件:fastest ...

  7. IOS - NSDate 自己挖的坑,自己跳

    NSDate:5是坑啊啊! NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDat ...

  8. 实现el-dialog的拖拽,全屏,缩小功能

    基于el-dialog, 封装了一下.,实在懒得写,所以直接把代码 粘出来了 大概粘了一下效果.自己体会把. 组件使用 <el-dialog v-dialogDrag ref="xhz ...

  9. java 比较两个时间大小

    Date d1 = new Date(System.currentTimeMillis()-1000); Date d2 = new Date(System.currentTimeMillis()); ...

  10. 03.IO读写-2.用with open进行文件读写

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...