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=;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的更多相关文章
- 关于android webview 设置cookie的问题
转自:http://blog.csdn.net/encienqi/article/details/7912733 我们在android中访问网络经常会用到Apache的HttpClient,用此类去访 ...
- android webview里获取和设置cookie
private class MyWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebVie ...
- Android webview 写入cookie的解决方法以及一些属性设置
原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...
- Android webview中cookie增加/修改
最近项目需求中,需要满足往webview传递cookie,而且cookie需要增加修改: public class MainActivity extends Activity { private We ...
- Android 应用内HttpClient 与 WebView 共享 Cookie
DefaultHttpClient httpclient=....; String toUrl="https://cap.cityu.edu.hk/studentlan/details.as ...
- android webview带cookie访问url
问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...
- [Android] 使用Webview进行OAUTH
1. 源起 最近在弄Google登录,Google登录要求手机上必须按照Google Play Service,有些手机比如小米,没有Google Play Servcie,因此,有必要实现一 ...
- Android之webview详解
文章大纲 一.webview基本介绍1.什么是webview2.为什么要使用webview3.webview基本操作 二.webview高级使用1.WebView状态2.资源加载3.WebView加载 ...
- 转:【WebView的cookie机制 】轻松搞定WebView cookie同步问题
原文链接:http://blog.csdn.net/fengyuzhengfan/article/details/51517622 在进行APP+H5混合开发的时候,一些功能是用native方法实现的 ...
随机推荐
- 三维投影总结:数学原理、投影几何、OpenGL教程、我的方法
如果要得到pose视图,除非有精密的测量方法,否则进行大量的样本采集时很耗时耗力的.可以采取一些取巧的方法,正如A Survey on Partial of 3d shapes,描述的,可以利用已得到 ...
- forEach 列出数组的每个元素:
数组.forEach便利所有的元素 array.forEach(function(currentValue, index, arr), thisValue) function(currentValue ...
- chrome中自动回填表单解决
input添加属性autocomplete="new-password"
- NP是什么意思?
举例叙述(转自百度百科,纯为学习笔记) 编辑 在一个周六的晚上,你参加了一个盛大的晚会.由于感到局促不安,你想知道这一大厅中是否有你已经认识的人.你的主人向你提议说,你一定认识那位正在甜点盘附近角落的 ...
- 服务器安装ESXI6.5系统
服务器做raid5磁盘冗余配置步骤 1.打开服务器电源,进入服务器启动界面,按下F10后回车,等待服务器回应你的操作进入下一个页面 提示: 在进入服务启动页面,在页面的最下方就可以看到F9,F10, ...
- JSCH实现文件上传下载至sftp服务器
文件服务器采用FreeSSHd,文件服务器配置就不细说了. 直接上代码,该代码可以直接使用. import com.jcraft.jsch.*; import java.io.InputStream; ...
- vue 如何动态切换组件,使用is进行切换
日常项目中需要动态去切换组件进行页面展示. 例如:登陆用户是“管理员”或者“普通用户”,需要根据登陆的用户角色切换页面展示的内容.则需要使用 :is 属性进行绑定切换 <template> ...
- JavaScript基础简介
JavaScript引入的方式 直接在<script>标签中写 <script> console.log('hello world!'); </script> 引入 ...
- maven项目发布后访问jsp页面报错
type Exception report message java.lang.NullPointerException description The server encountered an i ...
- log4j 设置日志输出文件的路径
log4j.rootLogger=debug, A1 #输出到指定目录下 og4j.appender.A1.File=/log.log #输出到tomcat容器下的指定目录 log4j.appende ...