2012-07-04 110 views
1

的HttpClient不存儲Cookie我試圖從服務器與此代碼銀河S2

DefaultHttpClient httpClient = new DefaultHttpClient(); 
    httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, USER_AGENT); 
    HttpRequestRetryHandler retryhandler = new DefaultHttpRequestRetryHandler(6, true); 

    httpClient.setHttpRequestRetryHandler(retryhandler); 

    BasicCookieStore cookieStore = new BasicCookieStore(); 
    httpClient.setCookieStore(cookieStore); 
    if(Build.VERSION.SDK_INT>8){ 
     CookieManager cookieManager = new CookieManager(); 
     cookieManager.setCookiePolicy(CookiePolicy.ACCEPT_ALL); 
     CookieHandler.setDefault(cookieManager); 
    } 
    HttpGet httpget = new HttpGet(URL); 
     HttpResponse response = httpClient.execute(httpget); 


    HttpEntity entity = response.getEntity(); 
... 

它的正常工作與所有我想到目前爲止,除了三星Galaxy SII的設備(Android 4.0的獲取數據。 3)我的客戶。從服務器響應,似乎會話cookie不存儲。我沒有重現這個錯誤,我迄今爲止所嘗試的所有東西都沒有解決。你有任何線索嗎?

編輯:刪除的誰被禁用StrictMode政策(仍然有問題壽)

+0

您是否在單獨的線程/ asynctask上執行連接? –

+0

是的,我在asynctask上啓動它。線程策略不再需要。感謝您突出顯示:) –

+0

是的..你def不應該只是禁用StrictMode ... StrictMode是有原因的:)。 –

回答

1

多次嘗試我發現BasicCookieStore沒有添加任何的cookie後代碼陣營,因爲所有的cookies都未知過期理由(只在S2上)。我必須創建我自己的CookieStore實現,它會忽略到期日期檢查。這是一個臨時性的解決方案,我仍在挖掘一個更安全,更清潔的方式來解決這個問題。

+0

感謝您編寫此代碼。它爲我節省了很多時間。 我看着在兩個不同的Android手機上完成的http post的tcpdump(一個用android 2.3.x,另一個用android 4.03的三星galaxy s2),並且沒有明顯的看到請求發生了什麼問題。一個工作,而另一個沒有工作。再次謝謝你。 – wojciii

+0

不客氣:)。你解決了這個問題嗎?到目前爲止,我能做的最好的事情是重寫服務器腳本,以便不再需要cookie。 –

+0

我仍在調試。我使用HttpURLConnection來登錄 1)登錄(保存一個PHP會話cookie) 2)使用http post發送圖片和一些文本。 我查看了http請求/響應的工作時間,並且不起作用,並且它們看起來和協議一樣。唯一的區別是圖像文件數據。所以我沒有使用android cookie存儲或任何其他android方法自動保存cookie。 – wojciii

2

我有一個類似的問題。問題是我的手機導致日期不正確,因此所有的cookies都是空的!

+0

太棒了!謝謝,你救了我的一天 –