2012-12-16 80 views
1

我在這裏發現了一些關於這個問題的答案,但我沒有成功實現它們,所以希望有人可以檢查我的代碼並告訴我我在哪裏會錯的。DefaultHttpClient post獲取會話cookie並傳遞給WebView android

我已驗證我的Cookie是從DefaultHttpClient設置的,並且正在用Log.d寫出來,如您在下面的代碼段中所看到的。它就在那裏,它只是沒有被設置爲在這段代碼的底部被調用的WebView。傳遞的cookie是來自我的Asp.net mvc項目的會話cookie。任何想法爲什麼當WebView遇到該網站時不會讓我登錄?不要讓臉書的措辭丟掉你,我都在工作,這個cookie是爲我自己的服務器傳遞一個會話cookie,讓我登錄到我自己的網站(基於我的臉書的東西)。

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"); 

編輯:我也試過在代碼創建Web視圖:

WebView webView = new WebView(this); 

相同的結果。 Cookie未被髮送到網絡視圖。

回答

0

終於得到這個排序通過使用Asynctask和在後臺運行睡眠。

+0

嗨克里斯托弗,我得到同樣的問題。最後一天它在android 4.1.2上正常工作。今天它不適用於4.0.3。 我遵循相同的程序。任何幫助? – Darpan

0

您已經使用這條線 -

if (sessionCookie != null) { 
    cookieManager.removeSessionCookie(); 
    } 

要確保能夠收到新的Cookie每次。 好像你已經通過同樣的問題 走了,因爲我面對,請查看以下鏈接 -

removeSessionCookie() issue of android, (code.google.com)

它說,removeSessionCookie()在一個線程中實現的,因此當它是

調用;一個線程啓動並在您的setCookie(url, cookieString);被調用後,

它將刪除剛剛設置的新cookie。 因此,對於某些設備,它的效果很好,因爲removeSessionCookie()已經執行,

而對於某些設備,它會刪除cookie,並且我們會得到該問題。

我建議你刪除這removeSessionCookie();因爲你只設置一個cookie,所以它不會與其他cookie衝突。你的代碼將無縫工作。