1

我在 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");

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

WebView webView = new WebView(this);

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

4

2 回答 2

0

最后通过使用 Asynctask 并在后台运行 sleep 来解决这个问题。

于 2012-12-19T00:39:12.023 回答
0

你已经使用了这条线 -

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

确保您每次都能收到新的 cookie。好像您遇到了与我相同的问题,请查看以下链接-

android 的 removeSessionCookie() 问题,(code.google.com)

它说这removeSessionCookie()是在一个线程中实现的,所以无论何时

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

它会删除您刚刚设置的新 cookie。因此,对于某些设备,它removeSessionCookie()已经运行良好,

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

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

于 2013-07-24T09:43:17.157 回答