Как удалить файлы cookie с помощью CookieManager для определенного домена?

Я знаю о существовании CookieManager , но как удалить только файлы cookie домена?

Может кто-нибудь помочь мне с некоторым фрагментом кода?

Вызовите метод getCookie android.webkit.CookieManager для генерации заголовка Cookie RFC 2109 для интересующего вас URL-адреса или домена. Разберите заголовок файла cookie, чтобы получить список имен файлов cookie. Для каждого имени cookie сгенерируйте заголовок Set-Cookie RFC 2109 для этого имени, которое имеет дату истечения срока действия в прошлом и передает его в CookieManager setCookie . Хотя в документах API указано, что setCookie игнорирует значения, срок действия которых истек, текущая реализация Android фактически очищает файл cookie в этом случае. Чтобы защитить от будущих реализаций, которые игнорируют истекшие значения, указанные в документации, убедитесь, что файлы cookie были фактически удалены и выполняются некоторые резервные действия, если они не могут использовать метод CookieManager для этого резервного копирования.

 public void clearCookies(String domain) { CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); String cookiestring = cookieManager.getCookie(domain); String[] cookies = cookiestring.split(";"); for (int i=0; i<cookies.length; i++) { String[] cookieparts = cookies[i].split("="); cookieManager.setCookie(domain, cookieparts[0].trim()+"=; Expires=Wed, 31 Dec 2025 23:59:59 GMT"); } CookieSyncManager.getInstance().sync(); } 

Вот пример кода из проекта с открытым исходным кодом. Может быть, может помочь кому-то.

https://github.com/janrain/engage.android/blob/96f21b45738ef82a911e27d8a707aff3a1024d36/Jump/src/com/janrain/android/utils/WebViewUtils.java

 private static void deleteWebViewCookiesForDomain(Context context, String domain, boolean secure) { CookieSyncManager csm = CookieSyncManager.createInstance(context); CookieManager cm = CookieManager.getInstance(); /* http://code.google.com/p/android/issues/detail?id=19294 */ if (AndroidUtils.SDK_INT >= 11) { // don't trim leading '.'s } else { /* Trim leading '.'s */ if (domain.startsWith(".")) domain = domain.substring(1); } /* Cookies are stored by domain, and are not different for different schemes (ie http vs * https) (although they do have an optional 'secure' flag.) */ domain = "http" + (secure ? "s" : "") + "://" + domain; String cookieGlob = cm.getCookie(domain); if (cookieGlob != null) { String[] cookies = cookieGlob.split(";"); for (String cookieTuple : cookies) { String[] cookieParts = cookieTuple.split("="); /* setCookie has changed a lot between different versions of Android with respect to * how it handles cookies like these, which are set in order to clear an existing * cookie. This way of invoking it seems to work on all versions. */ cm.setCookie(domain, cookieParts[0] + "=;"); /* These calls have worked for some subset of the the set of all versions of * Android: * cm.setCookie(domain, cookieParts[0] + "="); * cm.setCookie(domain, cookieParts[0]); */ } csm.sync(); } } 

Я не вижу в любом случае этого в API, но вы всегда можете вникать в настоящий исходный код (с открытым исходным кодом это хорошо) … например, я нашел этот метод deleteCookies в этом классе: WebViewDatabase, который является частью Ядро Android.

Как вы можете видеть там … cookie – это просто строки в SQLite Database … поэтому, если вы можете сделать этот класс работы, по крайней мере, вы знаете, как это сделать самим.