我尝试过在网上找到的关于使用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()是异步运行的,可能是因为它没有及时完成还是根本没有运行?
答案 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();