Android verwenden CookieManager, um Cookies zu verwalten. Aber es gibt nur eine Methode 'removeAllCookies()', um Cookies zu entfernen, und dadurch wurden alle Cookies gelöscht. Jetzt möchte ich einen Cookie entfernen, der nur einer bestimmten URL zugeordnet ist, und andere Cookies werden nicht entfernt. Wie kann ich in dieser Situation tun?Android WebView removeCookie
5
A
Antwort
4
Ich habe einige kleine Änderungen in @ Summerxiaqings Antwort gemacht und ich habe überprüft, ob es funktioniert. (Hinzugefügt https, geändert leeren Scheck an TextUtils.isEmpty verabschiedete Cookie durch 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;
}
Im Inneren der Aktivität
mContext = getApplicationContext();
CookieManager mCookieManager = CookieManager.getInstance();
CookieSyncManager mCookieSyncManager = CookieSyncManager.createInstance(mContext);
clearCookieByUrl("http://example.com", mCookieManager, mCookieSyncManager);
1
1, Android haben diese Schnittstelle nicht unterstützt.
2, eine Arbeit in unserem Projekt.
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;
}
Hinweis: In einiger Android-Version (ich habe nicht die genaue Versionsnummer, meine Erfahrung ist Android 2.3), wird das System Host als Cookie-Domain verwenden, und auf der anderen Seite, wird das System verwenden‘. " + host als Cookie-Domäne. Ein besserer Weg ist für beide klar.
Verwandte Themen
- 1. Android WebView
- 2. Android webview
- 3. Android: WebView-Kompatibilität (Chromium und WebKit WebView)
- 4. android webview: Wie man javaScript Warnungstiteltext in android webview ändert?
- 5. Android WebView nicht umleiten
- 6. Android iOS webview accessibilitiy
- 7. Android Webview benutzerdefinierte Fehlerseite
- 8. Android Textauswahl In Webview
- 9. Android, Webview, erhalten Formulardaten
- 10. Android webview limited loading
- 11. Android WebView Viewport
- 12. Javascript in Android WebView
- 13. Android: Webview und Aktivität
- 14. Android Chromium WebView Absturz
- 15. Android WebView Fokus Problem
- 16. Android: NullPointerException on webview
- 17. Temporäre Webview Android
- 18. Android WebView Hintergrundfarbe
- 19. WebSocket in Android WebView
- 20. Barrierefreiheit und Android WebView
- 21. Firebase in android webview
- 22. Android WebView Handle onReceivedClientCertRequest
- 23. Android WebView TimeOut
- 24. Android Webview Redirect Schleife
- 25. Android deaktivieren WebView Actionmode
- 26. Android Webview Unbekannter Fehler
- 27. Android WebView - Intercept Klicks
- 28. Android: PhoneGap vs Webview
- 29. Android Webview shouldOverrideUrlLoading-Methode
- 30. Android Webview SwipeRefreshLayout Bereich