2012-07-28 58 views
12

,我從一個HTTPGET請求獲得兩個餅乾和他們在CookieManager存儲這樣的:的Android CookieManager setCookie方法並不在我的應用程序設置任何

//Clear old cookies 
CookieManager.getInstance().removeAllCookie(); 
CookieSyncManager.getInstance().sync(); 

//Save the two cookies: auth token and session info 
List<Cookie> cookies = httpclient.getCookieStore().getCookies(); 
if (cookies != null) { 
    for (Cookie cookie : cookies) { 
     String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain(); 
     CookieManager.getInstance().setCookie("http://alpha.mydomainname.com", cookieString); 
    } 

    System.out.println(CookieManager.getInstance().hasCookies()); //Prints false in 2.3, true in 4.0.3 

    CookieSyncManager.getInstance().sync(); 

    System.out.println(CookieManager.getInstance().hasCookies()); //Also prints false in 2.3 and true in 4.0.3 
} 

我兩個測試相同的代碼不同的設備和有趣的是,Cookie在4.0.3中正確設置(並且在應用程序的啓動之間轉移),但不在2.3.3中。當我說他們沒有設置,我的意思是hasCookies()返回false,並且getCookie()返回null,當我提供的URL。

我在調用setCookie時嘗試了Cookie URL的每種可能的組合:「http://alpha.mydomainname.com」,「http://www.mydomainname.com」,「http:// mydomainname。 com「,」mydomainname.com「,」alpha.mydomainname.com「,」.mydomainname.com「,」www.mydomainname.com「,它們都不起作用。請幫忙。

+1

你有沒有得到這個工作?我現在遇到了同樣的問題... – 2012-12-18 23:22:01

+1

我需要更多的嘗試來確定,但我發現類似以下內容:如果設置了Expires標頭,則Cookie保存在2.3.3上,但不是4.0 .4,而如果Expires缺失,cookie將保存在4.0.4而不是2.3.3。 – hly 2013-01-22 14:48:03

+0

你解決了你的問題嗎?我在這裏面對同樣的問題.... – 2013-10-08 15:12:58

回答

0

我也遇到了一些奇怪的行爲與CookieManager,最終我結束瞭解決方案是一種解決方法 - 但它的工作原理。
而不是使用CookieManager的我只是用HTTP cookie頭,所以例如使用HttpUrlConnection它可以看起來像:

//Save the two cookies: auth token and session info 
List<Cookie> cookies = httpclient.getCookieStore().getCookies(); 
if (cookies != null) { 
for (Cookie cookie : cookies) { 
    String cookieString = cookie.getName() + "=" + cookie.getValue(); 
    myHttpURLConnection.setRequestProperty("Cookie", cookieString); 
} 

當然,如果你需要堅持這些cookie,你將不得不做wourself並將它們的值保存在某個地方供以後使用...

3

我最近有一個類似的問題,下面的解決方案爲我工作。我在開始時創建/獲取CookieSyncManager和CookieManager的實例,並在整個代碼中使用它們,而不是再次創建新實例。我還必須嘗試將cookie設置在正確的域上 - 我必須將其設置爲出現在其中一個重定向中的域。

final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(context); 
final CookieManager cookieManager = CookieManager.getInstance(); 
cookieManager.setAcceptCookie(true); 
cookieManager.removeSessionCookie(); 

//Save the two cookies: auth token and session info 
List<Cookie> cookies = httpclient.getCookieStore().getCookies(); 
if (cookies != null) { 
    for (Cookie cookie : cookies) { 
     String cookieString = cookie.getName() + "=" + cookie.getValue() + "; Domain=" + cookie.getDomain(); 
     cookieManager.setCookie("http://mydomainname.com", cookieString); 
    } 
    cookieSyncManager.sync(); 
} 
0

該Cookie不能包含分號,怎麼一回事,因爲分號裝置分離器詮釋餅乾。

-2

供將來參考。我已經在S7上測試了這個與Android 7和Moto X與Android 5

// base domain 
     String domain = "http://www.cudomor.com"; 
     // get instance 
     CookieManager cookieManager = CookieManager.getInstance(); 
     // just to check current cookies on debug mode 
     String currentCookies = cookieManager.getCookie(domain); 
     Log.e("cookieTag", currentCookies); 
     // just in case... 
     cookieManager.setAcceptCookie(true); 
     // in my test, was not necessary put domain or expire or path, just this 
     String cookieString = "cookieName=" + "cookieValue"; 
     // setCookie add or update the cookie 
     cookieManager.setCookie(domain, cookieString); 
相關問題