Xamarin.Auth,WebView在Android上清除Cookies

7

我已经尝试了在使用Xamarin.Auth清除Android WebView的cookie方面,网上能够找到的所有方法。该库未公开Android WebView; 我无法使用其WebSettings或清除WebView对象上的缓存。

Xamarin.Auth公开了一种清除cookie的方法:

 public static void ClearCookies()
 {
        global::Android.Webkit.CookieSyncManager.CreateInstance(global::Android.App.Application.Context);
        global::Android.Webkit.CookieManager.Instance.RemoveAllCookie();
 }

这似乎对cookie没有影响。我可以在通过Chrome进行调试时看到cookies,清除它会删除所有cookie。

我尝试过CookieManager.Instance.RemoveAllCookies(null)CookieManager.Instance.RemoveSessionCookies(null),在Xamarin.Auth创建自己的实例之前创建一个新的WebView,将SetAcceptCookies设置为false,清除WebViewStorage,并删除“webview.db”和“webviewCache.db”。但是所有cookie仍然存在。

我已经查看了大量的建议和答案。

使用Xamarin.Auth v1.5.0.3,在S4 Mini、S7、LG G3 Beat上进行测试。

*编辑
由于CookieManager.Instance.Sync()是异步运行的,可能是因为它没有及时完成或者根本没有运行?

2个回答

10

以下代码对您有用

Xamarin.Android:

 var cookieManager = CookieManager.Instance;
 cookieManager.RemoveAllCookie();

Xamarin.iOS:

 NSHttpCookieStorage CookieStorage = NSHttpCookieStorage.SharedStorage;
        foreach (var cookie in CookieStorage.Cookies)
            CookieStorage.DeleteCookie(cookie);
      }

Xamarin.Forms:

PCL:

IClearCookies.cs

 using System;
 namespace POCDemo
 {
    public interface IClearCookies
     {
        void Clear();
     }
 }

安卓:

IClearCookiesImplementation.cs

using POCDemo.Droid;
using Xamarin.Forms;
using System.Net;
using Android.Webkit;

[assembly: Dependency(typeof(IClearCookiesImplementation))]
namespace POCDemo.Droid{
public class IClearCookiesImplementation : IClearCookies{
    public void Clear(){
        var cookieManager = CookieManager.Instance;
        cookieManager.RemoveAllCookie();
      }
    }
 }

iOS

IClearCookiesImplementation.cs

using POCDemo.iOS;
using Xamarin.Forms;
using System.Net;
using Foundation;

[assembly: Dependency(typeof(IClearCookiesImplementation))]
namespace POCDemo.iOS{
public class IClearCookiesImplementation : IClearCookies{
    public void Clear(){
        NSHttpCookieStorage CookieStorage = NSHttpCookieStorage.SharedStorage;
        foreach (var cookie in CookieStorage.Cookies)
            CookieStorage.DeleteCookie(cookie);
      }
   }
}

调用依赖服务

PCL:

DependencyService.Get<IClearCookies>().Clear();

对我来说它正在运作


这个代码可以运行,但是在撰写时,它仅适用于实际的iOS设备。我使用iOS 14.5模拟器(iPhone 12)和Xamarin 16.9测试了这段代码,但没有找到任何要删除的cookie。在iPhone X 14.4.2上运行就没问题了。 - Tim Hobbs

2
我已经成功使用以下代码行:

我已经成功使用以下代码行:

CookieManager.Instance.RemoveAllCookie();
CookieManager.Instance.RemoveSessionCookie();
CookieManager.Instance.Flush();
CookieSyncManager.Instance.Sync();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接