【问题标题】:Clear all cookies from WebView从 WebView 清除所有 cookie
【发布时间】:2017-08-24 23:45:55
【问题描述】:

我目前正在使用 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,或者至少获取它们的列表,以便我可以在每个 cookie 上使用 DeleteCookie

【问题讨论】:

    标签: c# cookies webview uwp


    【解决方案1】:

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

    AFAIK,除了ClearTemporaryWebDataAsync,没有清除缓存数据的方法,但是您提供的代码 sn-p 确实清除了 cookie。对于您认为事先不知道 cookie 的域的情况,您可以通过 NavigationStarting 事件句柄的 WebViewNavigationStartingEventArgs 获取当前导航 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 导航时清除 cookie。您可能需要设置一个标志以确保 WebView 是否为新实例,具体取决于您的应用逻辑。

    另外,在为 Windows 10 编译的应用程序中,WebView 使用 Microsoft Edge 呈现引擎来显示 HTML 内容。清除当前WebView实例的cookies也可能清除其他的,这和你发现新实例时cookies仍然存在一样。

    【讨论】:

    • 谢谢!我想到了类似的东西:只需保留所有访问过的 URL 的“历史记录”,然后在需要时循环遍历它并删除 cookie,但我正在寻找一个“更清洁”的解决方案(例如,它还负责第三方饼干)。
    猜你喜欢
    • 2015-11-22
    • 2017-02-21
    • 1970-01-01
    • 2017-07-15
    • 2013-08-18
    • 1970-01-01
    • 2014-09-25
    • 2010-09-15
    • 2016-09-02
    相关资源
    最近更新 更多