Xamarin.Auth,Android上的WebView Clear Cookies

时间:2017-07-01 14:27:55

标签: cookies xamarin.forms android-webview xamarin.auth

我尝试过在网上找到的关于使用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&#34 ;和" webviewCache.db。"但所有的饼干仍然存在。

我看了很多建议和答案。

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

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

2 个答案:

答案 0 :(得分:4)

以下代码对您有用

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

这对我有用

答案 1 :(得分:0)

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

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