我有一个活动可以让你登录到页面。在下一个活动中,如果登录成功,它应该显示基于cookie的网页。
cookie将被检索,我尝试使用以下代码将其放到webview上:
Cookie sessionCookie = LoginWebView.cookie;
CookieSyncManager.createInstance(webview.this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
Log.v(TAG, "COOKIE SYNC: " + cookieString);
cookieManager.setCookie(domain, cookieString);
CookieSyncManager.getInstance().sync();
}
webView.setWebViewClient(new MyWebViewClient ());
webView.loadUrl("http://a_page.com/getpageiphone.aspx?p=home");
这完全是基于stackoverflow上其他问题的代码,但是当我加载web页面时,它似乎不起作用。似乎我的代码有点不对劲,但我看不清在哪里,我开始觉得自己做错了什么。
最佳答案
你用过这句台词-
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
}
。
确保你每次都能收到新的饼干。
看来你和我遇到过同样的问题,请看下面的链接-
removeSessionCookie() issue of android (code.google.com)
它说
removeSessionCookie()
是在一个线程中实现的,因此每当调用它时;一个线程启动并且在调用setCookie(url, cookieString);
之后,它会删除刚刚设置的新cookie。因此,对于某些设备来说,它工作得很好,而且
removeSessionCookie()
已经执行,而对于某些设备来说,它删除了cookie,我们就遇到了这个问题。通过使用
SystemClock.sleep(500);
,您只需让系统先完成removeSessionCookie()我建议您删除这个
removeSessionCookie();
,因为您只设置了一个cookie,所以不会与其他cookie冲突。您的代码将无缝工作。