在安卓的WebView中设置Cookies

15

我正在尝试在我的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时,这些cookie为空。有什么问题吗?请给予建议。 谢谢!


2
问题比答案更有帮助。太好了。 - Darpan
我的工作代码和查询编译方法 - Vadim.Ivanov
2个回答

7
解决了!!!问题出在webView上,我不知道发生了什么,但如果我创建新的webView并将其添加到视图中,问题就会解决。
WebView webView = new WebView(Activity.this);

它可以工作。如果我使用findViewById()从活动中读取webview,则无法正常工作。

此外,如果您需要设置先前从网站收到的cookie列表。您只需要使用for循环遍历并设置所有内容即可。这帮助我解决了这种情况。


那么这个方法是怎么工作的呢?你的回答对我来说不太清楚,能否解释一下? - Alex
亲爱的Alex,我不知道为什么,但如果使用findViewById获取webView是不起作用的,如果手动创建webView并将其添加到布局中,则可以正常工作。 - flipper83
@flipper83 我现在也面临着同样的问题..你可以详细解释一下你具体是怎么做的吗? - Lara
对我来说,使用findViewById()是有效的,顺便感谢:) - Sanket Kachhela

5
CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(mWebView.getContext());
...
cookieSyncManager.sync();

问题的原因是代码错误。您应该按照以下方式操作:
CookieSyncManager.createInstance(mWebView.getContext());
...
CookieSyncManager.getInstance().sync();

不需要手动创建 WebView 了...


这个CookieSyncManager.createInstance(mWebView.getContext()); 在某种程度上帮助了我。我之前传递了一些不同的上下文给cookie同步管理器。谢谢。 - Darpan
我认为这是解决问题的正确方案。 - Adrián Pérez
这能让 cookie 对普通的 Web 浏览器也可用,以备将来使用吗? - Manish Patiyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接