我有一项活动可让您登录页面。在下一个活动中,如果登录成功,它应该显示基于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上其他问题的代码而丢失,但是当我加载网页时,它似乎不起作用。似乎我的代码有一些问题,但我看不到哪里,我开始认为我做错了。
答案 0 :(得分:9)
您已使用此行 -
if (sessionCookie != null) {
cookieManager.removeSessionCookie();
}
。 确保您每次都收到新的cookie。
好像你遇到了同样的问题,请查看以下链接 -
removeSessionCookie() issue of android (code.google.com)
它说removeSessionCookie()
是在一个线程中实现的,所以无论何时调用它;一个线程启动,在调用setCookie(url, cookieString);
之后,它会删除刚刚设置的新cookie。
因此,对于某些设备,它已经正常运行removeSessionCookie()
,而对于某些设备,它会删除cookie,我们就会遇到这个问题。
使用SystemClock.sleep(500);
,你刚给系统完成了removeSessionCookie()
我建议您删除此removeSessionCookie();
,因为您只设置了一个Cookie,因此它不会与其他Cookie冲突。您的代码将无缝运行。
答案 1 :(得分:1)
首先,请务必阅读您网站提供的标题值。您可以通过Wireshark确定这一点。
其次,当您知道cookie的外观(基于您的Wireshark值)时,您应该尝试在代码中实现相同的值。确保调试cookie的值,并在cookie不匹配的情况下对cookie本身进行调整。