2014-01-05 1 views
4

내 안드로이드 응용 프로그램에서 나는 webview 있습니다. 여러 도메인의 URL을로드합니다. 특정 도메인에서 모든 쿠키를 삭제해야합니다. 다른 도메인의 쿠키를 보관하고 싶습니다. 하지만 한 도메인에서 모든 쿠키를 삭제해야합니다. 내 요청을 처리하는 다른 모든 솔루션에 대해 열려 있습니다. 도메인은 http와 https를 모두 사용합니다.안드로이드 CookieManager setCookie 여러 쿠키를 만듭니다

그러나 CookieManager.setCookie를 사용하려고하면 해당 도메인에 사용할 수있는 쿠키가 모두 삭제되지 않았습니다. 여러 개의 쿠키 키가 해당 키에 쓸 때 표시됩니다.

아래 코드를 첨부합니다. 결과는 주석 줄에서 찾을 수 있습니다. 이야기가 끝나면 나는이 쿠키를 얻는다. 여러 값에 대한 참고 사항 :

public static Vector<String> getCookieAllKeysByCookieString(String pCookies) { 
    if (TextUtils.isEmpty(pCookies)) { 
     return null; 
    } 
    String[] cookieField = pCookies.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; 
} 

내가 얻을 수있는 쿠키 : 쿠키 키를 얻기 위해 쿠키 문자열을 분할

"userid=12%34; token=12ased; remember_check=0; userid='-1'; token='-1'; remember_check='-1';" 

내 도우미 함수

// I take cookie string for specific URL 
mCookieManager = CookieManager.getInstance(); 
String url2="https://mysite.com"; 
String cookieString = mCookieManager.getCookie(url2); 
Toast.makeText(mContext, "cookie string:\n"+cookieString, Toast.LENGTH_SHORT).show(); 
// result is: userid=12%34; token=12ased; remember_check=0; 

을 그럼 난 오래된 쿠키를 대체하기 위해 전화 .

Vector<String> cookie = CookieUtil.getCookieAllKeysByCookieString(cookieString); 
if (cookie == null || cookie.isEmpty()) { 
    Toast.makeText(mContext, "cookie null", Toast.LENGTH_SHORT).show(); 
} 
if (cookie != null) { 
    int len = cookie.size(); 
    Toast.makeText(mContext, "cookie number: "+len, Toast.LENGTH_SHORT).show(); 
    // result is, cookie number: 3 
    String cookieNames=""; 
    for (int i = 0; i < len; i++) { 
     cookieNames += "\n"+cookie.get(i) ; 
     mCookieManager.setCookie(url2, cookie.get(i) + "='-1';"); 
    } 
    Toast.makeText(mContext, "cookieNames:\n"+cookieNames, Toast.LENGTH_SHORT).show(); 
    // result is: "cookienames: userid token remember_check" 

    mCookieSyncManager.sync(); 

    cookieString = mCookieManager.getCookie(url2); 
    Toast.makeText(mContext, "cookie string:\n"+cookieString, Toast.LENGTH_SHORT).show(); 
    mCookieSyncManager.sync(); 
    // result is: "userid=12%34; token=12ased; remember_check=0; userid='-1'; token='-1'; remember_check='-1';" 
} 

편집 :이 같은
나는 또한 시도 이기에, setcookie :

mCookieManager.setCookie(url2, cookie.get(i) + "=-1;"); 
mCookieManager.setCookie(url2, cookie.get(i) + "=-1"); 

Edit2가 : 이기에, setcookie의 서명은 다음과 같이이다 :

/** 
* Sets a cookie for the given URL. Any existing cookie with the same host, 
* path and name will be replaced with the new cookie. The cookie being set 
* must not have expired and must not be a session cookie, otherwise it 
* will be ignored. 
* 
* @param url the URL for which the cookie is set 
* @param value the cookie as a string, using the format of the 'Set-Cookie' 
*    HTTP response header 
*/ 
public void setCookie(String url, String value) { 
    throw new MustOverrideException(); 
} 

내가 쿠키 문자열 내부에 동일한 키를 얻을 수 있지만 ("userid=12%34; token=12ased; remember_check=0; userid='-1'; token='-1'; remember_check='-1';") 그들은 다른 주인 또는 경로가있을 것인가?

답변

2

Android에서 CookieManager과 비슷한 경험을했습니다. 동일한 쿠키를 설정하면 실제로 새로운 쿠키로 추가됩니다.

this solution을 구현하십시오. 에 원하는 쿠키 flush을 사용하면 원하는대로 다시 설정할 수 있습니다.

행운을 빈다.

+0

만료 방법을 시도했지만 아직 시도하지 않았습니다. 나중에 removeExpiredCookie를 호출하고 쿠키는 여전히 동일하게 유지됩니다. 또한 쿠키 값에 만료를 추가하면 setCookie가 쿠키 값을 무시한다고 생각합니다. – darewreck

관련 문제