在WPF中清除Cefsharp的缓存、Cookie和浏览器数据

10

我正在开发一款银行设备上的应用程序,其中使用了cefsharp浏览器。由于该应用程序将被任何人使用,因此不应保存任何前一个用户可以看到的数据。我想在关闭浏览器后清除所有缓存的浏览器数据。

public void InitBrowser()
    {
        settings = new CefSettings();
        settings.CachePath = AppDomain.CurrentDomain.BaseDirectory + "cache";
        settings.CefCommandLineArgs.Add("disable-application-cache", "1");
        settings.CefCommandLineArgs.Add("disable-session-storage", "1");
        if (!Cef.IsInitialized) Cef.Initialize(settings);
        webBrowser = new CefSharp.Wpf.ChromiumWebBrowser();
        MainGrid.Children.Add(webBrowser);
    }

在名为WebPages_Exit的函数调用后,我希望清除所有缓存数据。如何在不移除浏览器实例或关闭CEF的情况下删除所有缓存数据呢?因为CEF不能被初始化两次,并且在释放浏览器实例后创建另一个实例是行不通的。
我在ICookieVisitor中实现了visit函数来保存cookie,并使用deleteCookies方法或禁用缓存cefSetting命令等方法,但都没有效果,因为cookie列表为空,而IcookieVisitor的visit函数从未被调用。看起来它保存在另一个部分,并且只有在CEF关闭时才会重置。
2个回答

18

我找到答案了!原因是禁用了缓存设置。 这样做其实会缓存数据,但无法访问。例如,您无法在不关闭CEF的情况下删除Cookie。因此,如果启用缓存设置(将其保留为默认值),则可以使用Cef.GetGlobalCookieManager().DeleteCookies("", "")来删除它们。


3
DeleteCookies() will just delete cookies, not cached data such as css, js, etc. For that I think you need to use Browser.GetBrowser.Reload(True) - CrazyTim
请注意,根据某些条件,Cef.GetGlobalCookieManager() 可能会返回 null。 - Simon Mourier

2

在调用Cef.Initialize之前,您可以删除缓存文件夹:

Directory.Delete(cacheDirBase + "\\blob_storage", true);
Directory.Delete(cacheDirBase + "\\Cache", true);
Directory.Delete(cacheDirBase + "\\Code Cache", true);
Directory.Delete(cacheDirBase + "\\GPUCache", true);
Directory.Delete(cacheDirBase + "\\Local Storage", true);
Directory.Delete(cacheDirBase + "\\Session Storage", true);

只需删除您不想删除的部分即可。


cacheDirBase是什么? - Hossein Ebrahimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接