从其他域删除Cookie

时间:2012-05-10 16:47:54

标签: c# wpf cookies webautomation

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

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

3 个答案:

答案 0 :(得分:2)

如果您的测试环境在Windows系统上运行(听起来像是这样),您可以使用pInvoke来操作缓存。需要以下四种方法。不幸的是,代码归我所工作的公司所有,而不是我,所以我不能把它全部粘贴在这里。它涉及使用“FindFirstUrlCacheEntry”和“FindNextUrlCacheEntry”迭代缓存中的条目。检查缓存条目以查看它是否是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);

答案 1 :(得分:0)

您不应该使用来自X以外的其他地方的http请求删除网站X放置的cookie。

您有两种可能性:

  • 您可以使用自动匹配工具自动从浏览器UI中删除Cookie。
  • 您通过更改本地缓存中x域相关的IP(或其他方式)来伪造网站X.

答案 2 :(得分:0)

我最后只是清除了所有的cookie。设置服务器的方式应该不多,所以它确实不会成为问题。贯穿每个cookie是它对我有用的唯一方式。当我尝试删除文件夹时,我收到有关我的权限级别的错误。

    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) { }
        }
    }