饼干& Webview - Android中的CookieSyncManager!

时间:2011-04-20 11:06:20

标签: android http cookies login webview

我有一项活动可让您登录页面。在下一个活动中,如果登录成功,它应该显示基于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上其他问题的代码而丢失,但是当我加载网页时,它似乎不起作用。似乎我的代码有一些问题,但我看不到哪里,我开始认为我做错了。

2 个答案:

答案 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本身进行调整。