从其他域中删除 Cookie

本文关键字:删除 Cookie 其他 | 更新日期: 2023-09-27 18:33:43

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

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

从其他域中删除 Cookie

如果您的测试环境在 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);

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

您有两种可能性:

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

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

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