Xamarin.Auth, WebView Clear Cookies on Android



我已经尝试了我在网上能找到的关于使用 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();
}

这似乎对饼干没有影响。我可以在通过 Chrome 调试时看到 cookie,并在其中清除它确实会删除所有 cookie。

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

我看过很多荒谬的建议和答案。

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

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

以下代码对您有用

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:

饼干.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();
}
}
}

苹果

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();

它对我有用

我使用这些代码行取得了成功:

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

最新更新