6

关于使用 Xamarin.Auth 清除 Android WebView 的 cookie,我可能已经尝试了所有可以在网上找到的方法。Auth 库不暴露 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 进行调试时看到 cookie,并在那里清除它确实会删除所有 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() 异步运行,可能是这没有及时完成还是根本没有运行?

4

2 回答 2

9

下面的代码对你有用

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:

个人电脑:

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

调用依赖服务

个人电脑:

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

它对我有用

于 2018-02-08T09:03:38.640 回答
2

我已经成功使用这些代码行:

CookieManager.Instance.RemoveAllCookie();
CookieManager.Instance.RemoveSessionCookie();
CookieManager.Instance.Flush();
CookieSyncManager.Instance.Sync();
于 2018-02-08T07:43:04.483 回答