我已经在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未发送到网页视图。
答案 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冲突。您的代码将无缝运行。