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方法实现的 ...
随机推荐
- Win8.1应用开发之适配器模式(C#实现)
实际上适配器模式是用于解耦.设想一下我们的程序模块A在与模块B打交道时,需要在许多地方多次使用B中某个类的方法,而负责开发B的程序猿Tom还未完全实现该类,会随时更改该类中的方法,那么当Tom在修改时 ...
- Windows2012R2 时间同步设置
Windows2012R2里没有了internet时间,或者Internet时间无法同步成功,都可以尝试使用如下方法. 1.打开命令提示符, 输入:gpedit.msc,打开组策略管理器 2.执行上述 ...
- (转) shiro权限框架详解04-shiro认证
http://blog.csdn.net/facekbook/article/details/54906635 shiro认证 本文介绍shiro的认证功能 认证流程 入门程序(用户登录和退出) 自定 ...
- IdentityServer4-HybridAndClientCredentials
一.服务器 Client设置: new Client { ClientId = "mvc1", ClientName = "后台管理MVC客户端", Clien ...
- python笔记4----字典
1.哈希: 输入任意长度,输出固定长度. 即判断是否哈希,即判断可不可变. 2.创建字典 (1)直接创建:dic={1:'a',2:'b',3:'c'} (2)dict函数创建: list=[(1,' ...
- mysql进阶练习
一 . MySQL进阶练习 /*==========================创建班级表=============================*/ CREATE TABLE class ( ...
- GDI 直线和折线(6)
设置开始点 MoveToEx 函数用于移动画笔到指定的位置: BOOL MoveToEx( HDC hdc, // 设备环境句柄 int X, // 要移动到的 x 坐标 int Y, // 要移动到 ...
- 【BZOJ4864】【BJWC2017】神秘物质 - Splay
题意: Description 21ZZ 年,冬.小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这一天, 小诚刚从研究所得到了一块奇异的陨石样本, ...
- WEBGL学习【七】画布绘图
主要是对WEBGL的绘图部分进行了进一步加强的认识和理解 <!DOCTYPE HTML> <html lang="en"> <head> < ...
- vue-cli3.0 搭建项目
1.首先我们先在安装好node node用于npm安装[自行百度] 2.全局安装vue 通过npm命令安装vue.js 在用vue.js在用于构建大型的应用时推荐使用npm安装,npm能很好的和w ...