Android używa CookieManager do zarządzania plikami cookie. Ale istnieje tylko jedna metoda "removeAllCookies()", aby usunąć plik cookie, co spowodowało usunięcie wszystkich plików cookie. Teraz chcę usunąć plik cookie powiązany tylko z określonym adresem URL, a inne pliki cookie nie zostaną usunięte. W tej sytuacji, jak mogę to zrobić?Android WebView removeCookie
5
A
Odpowiedz
4
Wprowadziłem drobne zmiany w odpowiedzi @ summerxiaqing i sprawdziłem, czy działa. (Dodano https, zmienił pusty czek TextUtils.isEmpty, przeszedł CookieManager argument)
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;
}
Wewnątrz Aktywny
mContext = getApplicationContext();
CookieManager mCookieManager = CookieManager.getInstance();
CookieSyncManager mCookieSyncManager = CookieSyncManager.createInstance(mContext);
clearCookieByUrl("http://example.com", mCookieManager, mCookieSyncManager);
1
1, Android nie obsługuje tego interfejsu.
2, obejście w naszym projekcie.
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;
}
UWAGA: W niektórych wersji Androida (nie mam dokładny numer wersji, moje doświadczenie jest Android 2.3), system użyje hosta jako domena ciasteczka, az drugiej strony, system użyje”. " + host jako domena cookie. Lepszy sposób jest jasny dla nich obu.
Powiązane problemy
- 1. Android: PhoneGap vs Webview
- 2. Android Webview POST
- 3. Uchwyt Android WebView onReceivedClientCertRequest
- 4. Android webview późny rendering
- 5. Android webView saveState
- 6. Android WebView smooth scroll
- 7. WebView z IFRAME android
- 8. Android WebView JavaScript getSelection
- 9. Kolor tła Android WebView
- 10. Wydajność Android WebView
- 11. można autolink daty Android WebView
- 12. Android WebView nie ładuje URL
- 13. Menu kontekstowe w Android WebView
- 14. Proguard przerywa Android WebView, dlaczego?
- 15. Android WebView przewijanie w dół
- 16. Android WebView nie ładuje jQuery
- 17. Android Webview pozostanie w aplikacji
- 18. Zrozumienie webview przeglądarki Android addjavascriptinterface
- 19. Android: Wyświetlanie obrazów w Webview
- 20. Android WebView powoduje naruszenie StrictMode.
- 21. Przekierowanie Android WebView 302 - Honeycomb
- 22. Skalowanie czcionek Android WebView iFrame
- 23. programowy kliknięcie w Android WebView
- 24. Android- Webview onPageFinished Called Twice
- 25. Android WebView canGoBack zawsze prawdziwy
- 26. Android ProgessBar podczas ładowania WebView
- 27. Android: WebView shouldInterceptRequest nie dodając RequestProperties w WebView
- 28. Czy nowy Android WebView działa tak samo, jak CrossWalk WebView
- 29. Android 2.3 hebrajski Pomoc w Webview
- 30. Jak zmienić rozmiar czcionki w Android WebView?