1

我正在尝试删除 webbrowser 控件中的 cookie。此代码删除了cookies文件,但在重新启动程序之前,cookies仍在内存中。

private void deleteCookies(string domain)
    {
        string cookiesPath =
            Environment.GetFolderPath(Environment.SpecialFolder.Cookies);
        string[] unWantedCookies = 
            Directory.GetFiles(cookiesPath, "*" + domain + "*");
        foreach (string cookie in unWantedCookies)
        {
            File.Delete(cookie);
        }
    }

我试过这段代码:

webBrowser1 = new WebBrowser();

但它没有用。我猜它在环境变量中的某个地方,但是在哪里?

4

2 回答 2

2

你真的不应该使用 File IO 来删除 cookie,因为 cookie 实际上不是文件,而是 index.dat 文件中的数据,有一个虚拟文件但它不是真实的,删除它不会从内存中删除 cookie (这是你的问题) - 也不建议使用 javascript hack 来执行此操作。

您最好查看 DeleteUrlCacheEntry 以删除 cookie,并使用 FindFirst/NextUrlCacheEntry 遍历所有缓存项,一旦开始循环,查找以“cookie:”开头的缓存项,然后您可以进一步查看 cookie 名称,创建时间(修改、同步、上次访问、到期等)来决定您要删除哪些 cookie。

互联网上有很多很好的预写代码示例,它们可以让您循环和删除 IE 中的缓存项,因此请使用其中任何一个,您需要做的就是在 DeleteUrlCacheEntry 调用之前添加一个过滤器决定是否要为该项目调用 DeleteUrlCacheEntry,当然,如果你这样做,它不仅会从内部数据库中删除缓存条目,还会将其从活动内存中删除,你也不会得到“文件正在使用”错误,因为它会在删除之前从内存和使用中释放它。

如果您需要更多信息或帮助,请告诉我。再一次,为您想要的特定语言搜索 DeleteUrlCacheEntry 代码,嘿,它甚至存在于 VB6 中,所以我相信您可以轻松找到 c# 的副本:)。

让我知道你是怎么相处的。

于 2012-08-31T11:54:30.040 回答
0

使用WebBrowser.InvokeScript( http://msdn.microsoft.com/en-us/library/cc491132.aspx ) 执行一些 Javascript 来清除当前页面的 cookie。

于 2012-08-29T15:31:54.413 回答