Winforms WebBrowser:如何删除cookie

时间:2012-08-29 15:30:34

标签: c# .net cookies webbrowser-control environment-variables

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

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();

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

让我知道你是如何相处的。

答案 1 :(得分:0)

使用WebBrowser.InvokeScripthttp://msdn.microsoft.com/en-us/library/cc491132.aspx)执行一些将擦除当前页面的Cookie的Javascript。