我想执行以下流程:
以某种方式保存 account1 的当前会话和当前网址。
要使用 account2 登录,我需要处理 account1 的会话。
现在使用 account2 登录Gmail,然后浏览一下。
现在,我希望在用户操作后允许在 account1 和 account2 会话之间切换。
由于我假设(也可能是错误的)会话由url,url params及其cookie确定,我已为每个帐户保存了所有内容,并且在切换时我已完成以下操作:
// url == url + params
CookieManager.getInstance().removeAllCookies();
CookieManager.getInstance().setCookie(url, cookie);
webview.loadUrl(url);
哪个不起作用。所以我尝试在加载url之前使用Javascript注入cookie,这也没有用,因为没有用,我的意思是没有会话可用,我已经回到了Gmail登录界面。 / p>
我该怎么做?我错过了什么?
答案 0 :(得分:1)
试试这种方式
public List<Cookie> sync(String url) {
CookieManager cookieManager = CookieManager.getInstance();
if (cookieManager == null)
return null;
RFC2109Spec cookieSpec = new RFC2109Spec();
String rawCookieHeader = null;
try {
URL parsedURL = new URL(url);
rawCookieHeader = cookieManager.getCookie(parsedURL.getHost());
if (rawCookieHeader == null)
return null;
int port = parsedURL.getPort() == -1 ? parsedURL.getDefaultPort() : parsedURL.getPort();
CookieOrigin cookieOrigin = new CookieOrigin(parsedURL.getHost(), port, "/", false);
List<Cookie> cookies = cookieSpec.parse(new BasicHeader("set-cookie", rawCookieHeader), cookieOrigin);
return cookies;
} catch (Exception e) {
}
return null;
}
public void sync(List<Cookie> cookies,String url) {
if (cookies != null) {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
for (Cookie cookie : cookies) {
Cookie sessionInfo = cookie;
String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain();
cookieManager.setCookie(url, cookieString);
CookieSyncManager.getInstance().sync();
}
}
}
请使用
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
sync(url); // store list of cookies in Global variable return by this function.
}
});
//before loading/swithich account
//sync(yourglobalvariable of list of cookis, url of respective account);
sync(cookies,urlAccount1);
webview.loadUrl(url);