2012-07-28 48 views
12

trong ứng dụng của tôi, tôi nhận được hai cookie từ một HttpGet yêu cầu và lưu trữ chúng trong CookieManager như thế này:Android CookieManager setcookie không đặt bất cứ điều gì

//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 
} 

Tôi đang thử nghiệm cùng mã trong hai các thiết bị khác nhau và điều thú vị là, các cookie được thiết lập (và cũng được chuyển giữa các lần khởi chạy ứng dụng) một cách chính xác trong 4.0.3 nhưng không phải trong 2.3.3. Khi tôi nói rằng họ không được thiết lập, tôi có nghĩa là hasCookies() trả về false và cũng getCookie() trả về null khi tôi cung cấp URL.

Tôi đã thử mọi kết hợp có thể có cho URL cookie khi gọi setCookie: "http://alpha.mydomainname.com", "http://www.mydomainname.com", "http: // mydomainname. com "," mydomainname.com "," alpha.mydomainname.com "," .mydomainname.com "," www.mydomainname.com ", không có công cụ nào trong số đó hoạt động. Hãy giúp tôi.

+1

bạn đã bao giờ làm việc này chưa? Tôi "m chạy vào cùng một vấn đề bây giờ ... –

+1

Tôi cần một vài cố gắng để chắc chắn, nhưng tôi đang tìm một cái gì đó như sau: nếu tiêu đề hết hạn được thiết lập, cookie lưu trên 2.3.3 nhưng không 4.0 .4, trong khi nếu hết hạn là thiếu cookie lưu trên 4.0.4 nhưng không 2.3.3. – hly

+0

Bạn đã giải quyết vấn đề của bạn? Tôi phải đối mặt với cùng ở đây .... –

Trả lời

0

Tôi cũng gặp phải một số hành vi lạ với CookieManager, cuối cùng tôi đã kết thúc với giải pháp là giải pháp - nhưng nó hoạt động.
Thay vì sử dụng CookieManager tôi chỉ sử dụng các tiêu đề cookie, vì vậy ví dụ sử dụng HttpUrlConnection nó có thể trông giống như rằng:

//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); 
} 

Tất nhiên, nếu bạn cần phải kiên trì các cookie, bạn sẽ phải làm điều đó wourself và lưu giá trị của chúng ở đâu đó để sử dụng sau này ...

3

Gần đây, tôi đã gặp phải sự cố tương tự và giải pháp sau đây phù hợp với tôi. Tôi tạo/nhận các phiên bản của CookieSyncManager và CookieManager ngay từ đầu và sử dụng chúng trong suốt mã, thay vì tạo các phiên bản mới một lần nữa. Tôi cũng đã phải thử nghiệm với việc thiết lập các cookie trên tên miền chính xác - tôi đã phải đặt nó vào tên miền xuất hiện trong một trong các chuyển hướng.

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 không thể bao gồm các dấu chấm phẩy, dấu chấm phẩy beacuse các nghĩa tách int cookie.

-2

Để tham khảo sau này. Tôi đã thử nghiệm điều này trên S7 với Android 7 và Moto X với 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); 
Các vấn đề liên quan