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方法实现的 ...
随机推荐
- 解决启动httpd报: apr_sockaddr_info_get() failed for错误
我测试库里 service httpd start 时报 下面错误 httpd: apr_sockaddr_info_get() failed for fengxin.wzjzt.centoshttp ...
- 基于连接的Java网络编程
实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...
- matplotlib简介-高质量图形输出
Matplotlib 是一个用来绘制二维图形的 Python 模块,它克隆了许多 Matlab 中的函数, 用以帮助 Python 用户轻松获得高质量(达到出版水平)的二维图形. 文章来源:http: ...
- QT线程使用收集示例
关于多线程问题: Qt和Boost做跨平台的线程封装,OpenMP主要做并行计算,让不精通多线程的人也能高效地利用CPU的计算能力.个人倾向于用boost.thread, boost.mpi. 一 ...
- HTML5中新增加Input 的种类
查询文本框 <input type="search"> 数字文本框 any 代表不设置 <input type="number" max=&q ...
- (转)基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder
http://www.cnblogs.com/wuhuacong/p/3780356.html Web开发上有很多HTML的编辑控件,如CKEditor.kindeditor等等,很多都做的很好,本文 ...
- 【数据分析学习】Pandas思维导图
点我查看原版
- vue自己写了一个div菜单,点击按钮展开,点击其他地方关闭这个div菜单
需求是通过点击body页面,在其他地方就关闭这个<div>菜单,给这个div一个id:problemList,但是点击我打开的按钮,不关闭. created () { document.o ...
- Python IO编程-读写文件
1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...
- 工具-VIM常用快捷键
使用vs code 的插件 amvim来快速编辑代码,要熟记下面的命令 由normal模式切换到insert模式的命令键 i 在光标左侧输入正文 I 在光标所在行的行首输入正文 a 在光标右侧输入正文 ...