我正在尝试在我的WebView
上设置一些Cookie,以便在我的应用上使用相同的会话打开浏览器。
我读了很多答案,但它们对我不起作用。我找到的唯一解决方案是在loadUrl
中,对extraHeaders
中的Cookie数据进行硬编码,但正如预期的那样,这仅适用于此请求,并且不会维护会话。
我的代码是:
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
cookieManager.setCookie("http://xx.xxx.example.com","mid="+MySession.GetSession().sessionId+" ; Domain=.example.com");
cookieSyncManager.sync();
String cookie = cookieManager.getCookie("http://xx.xxx.example.com");
Log.d(LOGTAG, "cookie ------>"+cookie);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new TuWebViewClient());
mWebView.loadUrl("http://xx.xx.example.com");
getCookie()
返回正确的数据,但是当我从服务器读取cookie时,这些是空的。怎么了?请指教。
谢谢!!!
答案 0 :(得分:7)
解决!!!!问题是webView,我不知道发生了什么,但如果我创建
WebView webView = new WebView(Activity.this);
它有效。如果我使用findViewById()
从活动中阅读webview,则无效。
此外,如果您需要设置之前从网站收到的Cookie列表。
您所要做的就是使用for-loop
来完成并设置所有这些内容。它帮助我解决了这个问题
答案 1 :(得分:5)
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
...
cookieSyncManager.sync();
是问题的原因。你应该这样做:
CookieSyncManager.createInstance(mWebView.getContext());
...
CookieSyncManager.getInstance().sync();
并且无需手动创建WebView ...