2012-08-12 16 views
5

Android कुकीज प्रबंधित करने के लिए कुकी मैनेजर का उपयोग करें। लेकिन कुकी को हटाने के लिए केवल एक विधि 'removeAllCookies()' है और यह सभी कुकीज़ हटा दी गई है। अब मैं केवल एक निर्दिष्ट यूआरएल से जुड़ी एक कुकी को हटाना चाहता हूं, और अन्य कुकीज़ को हटाया नहीं जा सकता है। इस स्थिति में, मैं कैसे कर सकता हूं?एंड्रॉइड वेबव्यू हटाने कोकी

उत्तर

4

मैंने @ गर्मीक्सियाकिंग के जवाब में कुछ मामूली बदलाव किए और मैंने इसे काम किया।

 public static void clearCookieByUrl(String url, CookieManager pCookieManager, CookieSyncManager pCookieSyncManager) { 
     Uri uri = Uri.parse(url); 
     String host = uri.getHost(); 
     clearCookieByUrlInternal(url,pCookieManager,pCookieSyncManager); 
     clearCookieByUrlInternal("http://." + host,pCookieManager,pCookieSyncManager); 
     clearCookieByUrlInternal("https://." + host,pCookieManager,pCookieSyncManager); 
    } 

    private static void clearCookieByUrlInternal(String url, CookieManager pCookieManager, CookieSyncManager pCookieSyncManager) { 
     if (TextUtils.isEmpty(url)) { 
      return; 
     } 
     String cookieString = pCookieManager.getCookie(url); 
     Vector<String> cookie = getCookieNamesByUrl(cookieString); 
     if (cookie == null || cookie.isEmpty()) { 
      return; 
     } 
     int len = cookie.size(); 
     for (int i = 0; i < len; i++) { 
      pCookieManager.setCookie(url, cookie.get(i) + "=-1"); 
     } 
     pCookieSyncManager.sync(); 
    } 

    private static Vector<String> getCookieNamesByUrl(String cookie) { 
     if (TextUtils.isEmpty(cookie)) { 
      return null; 
     } 
     String[] cookieField = cookie.split(";"); 
     int len = cookieField.length; 
     for (int i = 0; i < len; i++) { 
      cookieField[i] = cookieField[i].trim(); 
     } 
     Vector<String> allCookieField = new Vector<String>(); 
     for (int i = 0; i < len; i++) { 
      if (TextUtils.isEmpty(cookieField[i])) { 
       continue; 
      } 
      if (!cookieField[i].contains("=")) { 
       continue; 
      } 
      String[] singleCookieField = cookieField[i].split("="); 
      allCookieField.add(singleCookieField[0]); 
     } 
     if (allCookieField.isEmpty()) { 
      return null; 
     } 
     return allCookieField; 
    } 

(जोड़ा https, TextUtils.isEmpty को खाली जांच बदल गया है, तर्क द्वारा CookieManager पारित कर दिया) गतिविधि के अंदर

mContext = getApplicationContext(); 
CookieManager mCookieManager = CookieManager.getInstance(); 
CookieSyncManager mCookieSyncManager = CookieSyncManager.createInstance(mContext); 
clearCookieByUrl("http://example.com", mCookieManager, mCookieSyncManager); 
1

1, एंड्रॉइड इस इंटरफ़ेस का समर्थन नहीं करता है।

2, हमारे प्रोजेक्ट में एक काम है।

sCookieManager = CookieManager.getInstance(); 

public static void clearCookieByUrl(String url) { 

    Uri uri = Uri.parse(url); 
    String host = uri.getHost(); 
    clearCookieByUrlInternal(url); 
    clearCookieByUrlInternal("http://." + host); 
    } 

/** 
    * clear cookie by url 
    * @param url 
    */ 
    private static void clearCookieByUrlInternal(String url) { 
    if (Utils.isStringEmpty(url)) { 
     return; 
    } 
    String cookieString = sCookieManager.getCookie(url); 
    Vector<String> cookie = getCookieNamesByUrl(cookieString); 
    if (cookie == null || cookie.isEmpty()) { 
     return; 
    } 
    int len = cookie.size(); 
    for (int i = 0; i < len; i++) { 
     sCookieManager.setCookie(url, cookie.get(i) + "=-1"); 
    } 
    sCookieSyncManager.sync(); 
    } 

private static Vector<String> getCookieNamesByUrl(String cookie) { 
    if (Utils.isStringEmpty(cookie)) { 
     return null; 
    } 
    String[] cookieField = cookie.split(";"); 
    int len = cookieField.length; 
    for (int i = 0; i < len; i++) { 
     cookieField[i] = cookieField[i].trim(); 
    } 
    Vector<String> allCookieField = new Vector<String>(); 
    for (int i = 0; i < len; i++) { 
     if (Utils.isStringEmpty(cookieField[i])) { 
     continue; 
     } 
     if (!cookieField[i].contains("=")) { 
     continue; 
     } 
     String[] singleCookieField = cookieField[i].split("="); 
     allCookieField.add(singleCookieField[0]); 
    } 
    if (allCookieField.isEmpty()) { 
     return null; 
    } 
    return allCookieField; 
    } 

नोट: कुछ एंड्रॉयड संस्करण में (मैं सही संस्करण संख्या नहीं है, मेरे अनुभव एंड्रॉयड 2.3 है), प्रणाली कुकी डोमेन के रूप में मेजबान का उपयोग करेगा और दूसरे हाथ पर, प्रणाली का उपयोग करेगा '। ' + कुकी डोमेन के रूप में होस्ट करें। तो उनमें से एक बेहतर तरीका स्पष्ट है।

संबंधित मुद्दे