Android sử dụng CookieManager để quản lý cookie. Nhưng chỉ có một phương thức 'removeAllCookies()' để xóa cookie và điều này đã xóa tất cả cookie. Bây giờ tôi muốn xóa cookie chỉ được liên kết với một url được chỉ định và các cookie khác không bị xóa. Trong tình huống này, làm sao tôi có thể làm được?Android WebView removeCookie
5
A
Trả lời
4
Tôi đã thực hiện một số thay đổi nhỏ trong câu trả lời của @ summerxiaqing và tôi đã kiểm tra nó hoạt động. (Added https, thay đổi séc trống để TextUtils.isEmpty, thông qua CookieManager bởi lập luận)
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;
}
Bên trong Hoạt động
mContext = getApplicationContext();
CookieManager mCookieManager = CookieManager.getInstance();
CookieSyncManager mCookieSyncManager = CookieSyncManager.createInstance(mContext);
clearCookieByUrl("http://example.com", mCookieManager, mCookieSyncManager);
1
1, Android chưa hỗ trợ giao diện này.
2, Công việc xung quanh trong dự án của chúng tôi.
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;
}
LƯU Ý: Trong một số phiên bản android (tôi không có số phiên bản chính xác, kinh nghiệm của tôi là android 2.3) sẽ sử dụng máy chủ làm tên miền cookie. ' + lưu trữ dưới dạng tên miền cookie. Vì vậy, một cách tốt hơn là rõ ràng cả hai.
Các vấn đề liên quan
- 1. Android WebView Internationalization
- 2. Caching trong webview Android
- 3. Hiệu suất Android WebView
- 4. Android WebView Javascript getSelection
- 5. Android webView saveState
- 6. Android WebView cuộn mượt mà
- 7. Android- Webview trênPageFinished Called Twice
- 8. Trợ năng và Android WebView
- 9. Android Webview Vòng chuyển hướng
- 10. WebView và Cookie trên Android
- 11. WebView với một IFRAME android
- 12. Android singleTap/OnClick trong WebView
- 13. Android WebView không tải URL
- 14. webview với toàn màn hình trong android
- 15. Android WebView tập trung vấn đề
- 16. Tải tài nguyên Android vào một WebView
- 17. API Javascript JWPlayer cho Android Webview
- 18. Android webview bên trong một dịch vụ?
- 19. Android WebView thay thế cho webapps
- 20. Tải lên tệp WebView Android 4.0
- 21. nội dung webview android không thể chọn
- 22. YouTube Video không phát trong WebView - Android
- 23. Duyệt web riêng tư trên Android Webview
- 24. Android webview không phát video, jwembedder
- 25. Android: Gọi lại với thành phần WebView?
- 26. Hủy tải trong WebView trên Android
- 27. Android SDK WebView gọi Hoạt động
- 28. Android WebView để trống cho thanh cuộn
- 29. Âm thanh Html trong Android Webview
- 30. Cordova WebView TIMEOUT ERROR với android