C# 从其他域删除Cookie

C# 从其他域删除Cookie,c#,wpf,cookies,webautomation,C#,Wpf,Cookies,Webautomation,我正在开发一个web自动化工具。工具运行后,相关网站创建cookies,如果我再次尝试运行,会破坏自动化。因此,我想在自动化开始之前删除cookies。我没有访问实际创建cookie的域的权限。这可能吗?我知道如何操作cookie,但当您尝试从其他网站访问cookie时,所有这些逻辑都失败了 此外,如果可以避免,我不想创建WebBrowser控件。我正在尝试使用httpWebRequests做所有事情,以便它看起来更好 您不应该能够从X以外的其他地方删除网站X使用http请求提交的cookie

我正在开发一个web自动化工具。工具运行后,相关网站创建cookies,如果我再次尝试运行,会破坏自动化。因此,我想在自动化开始之前删除cookies。我没有访问实际创建cookie的域的权限。这可能吗?我知道如何操作cookie,但当您尝试从其他网站访问cookie时,所有这些逻辑都失败了


此外,如果可以避免,我不想创建WebBrowser控件。我正在尝试使用httpWebRequests做所有事情,以便它看起来更好

您不应该能够从X以外的其他地方删除网站X使用http请求提交的cookie

您有两种可能:

  • 您可以使用自动化工具自动从浏览器UI中删除cookie
  • 通过更改本地缓存中与X域相关的ip(或通过其他方式),可以伪造网站X

如果您的测试环境在Windows系统上运行(听起来像是这样),您可以使用pInvoke来操作缓存。需要以下四种方法。不幸的是,代码归我工作的公司所有,而不是我自己,所以我无法将其全部粘贴到这里。它涉及使用“FindFirstUrlCacheEntry”和“FindTextUrlCacheEntry”对缓存中的条目进行迭代。检查缓存条目以查看它是否是cookie,它是否属于您感兴趣的域,如果是,您可以删除它

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindFirstUrlCacheEntry ([MarshalAs (UnmanagedType.LPTStr)] string searchPattern, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize);

[DllImport (@"wininet", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool FindNextUrlCacheEntry (IntPtr ptrCacheHandler, IntPtr ptrCacheEntryInfo, ref int cacheEntryInfoSize);

[DllImport (@"wininet", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
private static extern bool FindCloseUrlCache (IntPtr ptrCacheEntryInfo);

[DllImport ("wininet.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern bool DeleteUrlCacheEntry (IntPtr lpszUrlName);

我最后只是清理了所有的饼干。服务器的设置方式不应该太多,所以这真的不会成为问题。对我来说,检查每一块饼干是唯一有效的方法。当我尝试删除文件夹时,我的权限级别出现错误

    private void ClearCookies()
    {
        string[] theCookies = System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Cookies));

        foreach (string currentFile in theCookies)
        {
            try
            {
                System.IO.File.Delete(currentFile);
            }
            catch (Exception ex) { }
        }
    }

大多数web自动化工具(如Selenium)都支持修改这样的内容。你用什么作为你的工具?(不,你不能直接通过网站做这件事,因为那会严重违反安全性)我正在用.NET4编写自动化工具。我没有使用一个已经存在的工具,因为这个自动化将是一个更大的软件,它需要正确的接口。我从软件中提取数据,然后在自动化结束时返回结果。自动化的范围很大,这实际上是一个支持使用现有工具的论点。看起来需要在客户端PC上安装Selenium。这不是一个选项。据我所知,我无法将自动化打包到.NET程序中。是的,这似乎可以满足您的需要。我想指出的一点是,使用Windows SDK方法将包括内存中的任何cookie,而不仅仅是写入文件的cookie。在我们的具体案例中,我们使用的是一个web浏览器控件,需要在它可能仍在内存中时删除它的一些cookie。这是一个有趣的观点。我需要清除的cookies在被清除时不应该出现在内存中,所以这是一个没有意义的问题,但是如果我需要删除内存中的cookies,我会记住这一点。