2011-03-22 170 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