DefaultHttpClient发布获取会话cookie并传递给WebView android

时间:2012-12-16 00:55:58

标签: android webview httpclient session-cookies

我已经在SO上找到了这个问题的一些答案,但是我没有成功实现它们,所以希望有人可以查看我的代码并告诉我哪里出错了。

我已经验证我的Cookie是从DefaultHttpClient设置的,并且正在使用Log.d写出来,如下面的代码片段所示。它就在那里,它只是没有为在这段代码段底部调用的WebView设置。传递的cookie是来自我的Asp.net mvc项目的会话cookie。任何想法为什么当WebView访问网站时它没有让我登录?不要让Facebook的措辞让你失望,我都有工作,这个cookie是为我自己的服务器传递一个会话cookie让我登录我自己的网站(基于我的Facebook的东西)。

Cookie sessionCookie = FacebookLoginService.cookie;
Log.d("intialwebview",sessionCookie.toString());
CookieSyncManager.createInstance(this);
CookieManager cookieManager = CookieManager.getInstance();
if (sessionCookie != null) {
    cookieManager.removeSessionCookie();
    String cookieString = sessionCookie.getName() + "=" + sessionCookie.getValue() + "; domain=" + sessionCookie.getDomain();
    Log.d("intialwebview",cookieString);
    cookieManager.setCookie(FacebookLoginService.cookie.getDomain(), cookieString);
    CookieSyncManager.getInstance().sync();
}  
//end cookie section


int userId = prefs.getInt(C.USER_ID, 0);
    webView = (WebView) findViewById(R.id.web_view);
webView.getSettings().setUserAgentString(webView.getSettings().getUserAgentString() + "(Rambo)");
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
webView.loadUrl(C.BaseUrl + "home/firstpage");

编辑:我还尝试使用以下代码创建网络视图:

WebView webView = new WebView(this);

同样的结果。 Cookie未发送到网页视图。

1 个答案:

答案 0 :(得分:0)

您已使用此行 -

if (sessionCookie != null) {
  cookieManager.removeSessionCookie();
  }

确保您每次都收到新的Cookie。 好像你已经经历过同样的问题 正如我所面对的,请查看以下链接 -

removeSessionCookie() issue of android, (code.google.com)

它说removeSessionCookie()是在一个线程中实现的,所以只要它是

调用;一个线程开始,在你的setCookie(url, cookieString);被调用之后

删除刚设置的新Cookie。 因此,对于某些设备,它已经正常运行,removeSessionCookie()已经执行,

虽然,对某些人来说,它会删除cookie,我们就会遇到这个问题。

我建议您删除此removeSessionCookie();,因为您只设置了一个Cookie,因此它不会与其他Cookie冲突。您的代码将无缝运行。