2011-03-22 113 views
14

我试图在我的WebView上设置一些cookie,以使用与我的应用相同的会话打开浏览器。在WebView中设置Cookie android

我读了很多答案,但他们不适合我。我找到的唯一解决方案是在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()返回正确的数据,但是当我从服务器读取饼干,这些都是空的。哪里不对?请指教。 谢谢!!!

+0

真的吗?没有人? – flipper83 2011-03-23 10:46:58

+2

问题帮助不止回答。大。 – Darpan 2013-07-11 16:44:01

+0

我的工作代码和查询编译的方法 http://stackoverflow.com/a/32189400/5261591 – 2015-08-24 18:47:27

回答

7

解决!!!!问题是与webView,我不知道发生了什么,但如果我创建

WebView webView = new WebView(Activity.this); 

它的工作原理。如果我从findViewById()的活动中阅读webview,它不起作用。

此外,如果您需要设置您之前从网站收到的cookies列表。 您只需使用for-loop即可完成所有设置。它帮我解决了这个问题

+0

因此,方式工作?你的回答不清楚,你能解释吗? – Alex 2011-10-19 08:47:28

+0

well alex我不知道为什么,但如果你使用findViewById的webView不工作,如果你手动创建webView并添加到布局的作品。 – flipper83 2011-10-27 16:43:22

+2

它不适用于我 – Mejonzhan 2013-01-05 09:40:52

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

是问题的原因。你应该这样做:

CookieSyncManager.createInstance(mWebView.getContext()); 
... 
CookieSyncManager.getInstance().sync(); 

而且会有无需手动创建的WebView ...

+0

这个CookieSyncManager.createInstance(mWebView.getContext());以某种方式帮助我。我正在向Cookie同步管理器传递一些不同的上下文。谢谢。 – Darpan 2013-07-11 16:42:44

+0

我认为这是解决问题的正确方法。 – 2014-08-06 11:10:27

+0

这可以使cookie可用于普通的Web浏览器以及将来使用? – 2017-05-29 10:15:32