Supprimer les cookies d’une webview dans une app #Windows Store (8.1 ou #UWP)
Lors du développement d’une application où l’authentification OAuth de l’utilisateur est utilisée, je me suis rendu compte d’un problème lors de l’implémentation du mécanisme de déconnection : la webview garde des cookies et ré-authentifie automatiquement l’utilisateur lorsqu’il tente de se connecter à nouveau.
La solution est bien sûr de vider les cookies de la WebView mais à la différence d’une application Silverlight, il n’existe pas de méthode “ClearCookiesAsync”.
Pour réaliser cette prouesse, il va donc falloir se souvenir des annonces de la Build 2014 et notamment celle indiquant l’arrivée de l’HttpClient “système” dans le namespace Windows.Net.
Celui-ci est en effet le même que celui utilisé par l’OS et les différents composants tels que la WebView.
On va alors utiliser la classe HttpBaseProtocolFilter et son gestionnaire de Cookie pour récupérer les cookies de la page d’authentification et les supprimer un à un.
Afin de réutiliser plus facilement ce bout de code et l’avoir dans l’intellissense (avec Resharper <3 notamment) je le place sous la forme d’une UserExtension dans le namespace du Control WebView :
namespace Windows.UI.Xaml.Controls { public static class WebViewExtension { public static void ClearCookiesForUrl(this WebView, string url) { var filter = new HttpBaseProtocolFilter(); var cookies = filter.CookieManager.GetCookies(new Uri(url)); foreach (var cookie in cookies) { filter.CookieManager.DeleteCookie(cookie); } } } }
Bon code !
Commentaires