场景: Android原生和H5的混合开发中,登录维护在原生,某些详情页面嵌套Webview。
问题:原生登录之后将cookie存起来,在 WebView.loadUrl("");之前设置cookie,针对每个项目cookie它的格式都不相同。
如果你不知道你们url的cookie格式的话,你可以将url复制到pc端的浏览器中,打开开发者模式如下(以Safari为例):
然后点击“开发”-------“显示javascript控制台”-----“网络”----“info”,然后你就能看见响音里面一堆字符串:
Set-Cookie: SESSION=Njc3NThmOWItOTEyNy00YWYxLThhMzMtNGQ5OTlkOWFjMjlj; Max-Age=2592000; Expires=Wed, 27 Nov 2019 17:58:16 +0800; Domain=elib.apabi.com; Path=/; HttpOnly; SameSite=Lax
然后呢,只需要将Njc3NThmOWItOTEyNy00YWYxLThhMzMtNGQ5OTlkOWFjMjlj 这个换成自己之前存起来的cookie换掉就好了,具体方法(某些参数其实不需要比如时间,我这里面就没拼接时间)。
syncCookie(“你的Url”);
mWebView.loadUrl(“你的Url”);
======================================================================================
private void syncCookie (String url) { CookieSyncManager.createInstance(mContext); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); String cookie = MySharedPreferences.getString(mContext, "session", null); // SESSION=NjI3NzMxMWYtNTQzNS00NzE5LWI3ZTgtNmZlNWE2MjNhNDFk; Max-Age=2592000; Expires=Wed, 27 Nov 2019 11:15:04 +0800; Domain=elib.apabi.com; Path=/; HttpOnly; SameSite=Lax String cookieString = "SESSION" + "=" + cookie+ "; Max-Age=" + "2592000" + "; Domain=" +"172.18.89.129"+"; Path=/; HttpOnly; SameSite=Lax"; cookieManager.setCookie(url, cookieString); CookieSyncManager.getInstance().sync(); String cookies = cookieManager.getCookie(url); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.flush(); } else { CookieSyncManager.getInstance().sync(); } }