android中给WebView设置Cookie

<span style="font-size:18px;"><span style="font-size:18px;">	最近项目中用到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=0;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());
				}
			}


		}
	}</span></span>
如果解决了您的问题,或者对你有一点点帮助的话,请帮顶一下,或者有什么意见,评论一下,谢谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值