清除WebView中的所有cookie

问题描述 投票:1回答:1

我目前正在使用UWP开发一个Windows Phone 10应用程序,我需要一个WebView,它将在此过程中设置几个cookie。 WebView可以多次实例化,我注意到在多个实例化时不会清除cookie,这使得我的工作流程有点困难(例如,用户必须使用WebView登录,然后何时重新实例化,旧的状态将在那里)。

我试过使用clearTemporaryWebDataAsync现在可以利用。更糟糕的是,我事先并不知道与cookie相关的域名,所以我不能做这样的事情:

HttpBaseProtocolFilter myFilter = new HttpBaseProtocolFilter();
HttpCookieManager cookieManager = myFilter.CookieManager;
HttpCookieCollection myCookieJar = cookieManager.GetCookies(new Uri("https://url.com"));
foreach (HttpCookie cookie in myCookieJar)
{
cookieManager.DeleteCookie(cookie);
}

API中是否有任何可以帮助我清除WebView的所有cookie,或者至少获取它们的列表以便我可以在每个上使用DeleteCookie

c# cookies webview uwp
1个回答
2
投票

更糟糕的是,我事先并不知道与cookie相关的域名,所以我不能做这样的事情:

AFAIK,除了ClearTemporaryWebDataAsync之外,没有其他方法可以清除缓存数据。但是您提供的代码段会清除Cookie。对于您考虑的事项,不提前知道cookie的域名,您可以通过WebViewNavigationStartingEventArgs事件处理的NavigationStarting获取当前导航的Uri。例如,

private void WebViewControl2_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args)
{
    Uri gotouri = args.Uri;
    HttpBaseProtocolFilter myFilter = new HttpBaseProtocolFilter();
    HttpCookieManager cookieManager = myFilter.CookieManager;
    HttpCookieCollection myCookieJar = cookieManager.GetCookies(gotouri);
    foreach (HttpCookie cookie in myCookieJar)
    {
        cookieManager.DeleteCookie(cookie);
    }
}

这将清除当前Uri的cookie。但每次WebView导航时,这将清除饼干。您可能需要设置一个标志,以确保WebView是否为新实例,具体取决于您的应用程序逻辑。

另一件事,在为Windows 10编译的应用程序中,WebView使用Microsoft Edge呈现引擎来显示HTML内容。当前WebView实例的清除cookie也可以清除其他cookie,这与您在拥有新实例时仍然存在的Cookie相同。

© www.soinside.com 2019 - 2024. All rights reserved.