如何从windows.form中删除Cookies?

Pro*_*imo 23 c# cookies webbrowser-control

我正在使用C#编写的windows.form应用程序上的Webbrowser控件.我想写一个方法,在访问某个站点后从Webbrowers控件中删除cookie.不幸的是,我不知道该如何做到这一点,并没有在互联网上找到很多帮助.

如果有人有实际经验,不仅仅是假设,因为它可能比看起来更棘手,我不知道.

int count = webBrowser2.Document.Cookie.Length;
webBrowser2.Document.Cookie.Remove(0,count);
Run Code Online (Sandbox Code Playgroud)

我只是假设上面的代码可以工作,但我想它不会.任何人都可以对这整个饼干有所了解吗?

Jor*_*lne 25

如果您启用了JavaScript,则可以使用此代码段清除以清除webbrowser当前所在站点的Cookie.

webBrowser.Navigate("javascript:void((function(){var a,b,c,e,f;f=0;a=document.cookie.split('; ');for(e=0;e<a.length&&a[e];e++){f++;for(b='.'+location.host;b;b=b.replace(/^(?:%5C.|[^%5C.]+)/,'')){for(c=location.pathname;c;c=c.replace(/.$/,'')){document.cookie=(a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString());}}}})())")
Run Code Online (Sandbox Code Playgroud)

它来自此书签用于清除cookie.

  • 在4.0上对我不起作用.我错过了什么吗? (5认同)
  • 注意:HttpOnly cookie不适用于javascript. (4认同)
  • 正如旁注所示,如果您需要能够清除所有站点的cookie,那么最好使用像axWebBrowser COM对象这样的东西..NET内置的WebBrowser控件非常被锁定.我只在切换到axWebBrowser时使用了这个选项,浏览器只需要能够浏览一个站点. (2认同)

小智 13

我从这里修改了解决方案:http: //mdb-blog.blogspot.ru/2013/02/c-winforms-webbrowser-clear-all-cookies.html

实际上,您不需要不安全的代码.这是适合我的助手类:

public static class WinInetHelper
{
    public static bool SupressCookiePersist()
    {
        // 3 = INTERNET_SUPPRESS_COOKIE_PERSIST 
        // 81 = INTERNET_OPTION_SUPPRESS_BEHAVIOR
        return SetOption(81, 3);
    }

    public static bool EndBrowserSession()
    {
        // 42 = INTERNET_OPTION_END_BROWSER_SESSION 
        return SetOption(42, null);
    }

    static bool SetOption(int settingCode, int? option)
    {
        IntPtr optionPtr = IntPtr.Zero;
        int size = 0;
        if (option.HasValue)
        {
            size = sizeof (int);
            optionPtr = Marshal.AllocCoTaskMem(size);
            Marshal.WriteInt32(optionPtr, option.Value);
        }

        bool success = InternetSetOption(0, settingCode, optionPtr, size);

        if (optionPtr != IntPtr.Zero) Marshal.Release(optionPtr);
        return success;
    }

    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    private static extern bool InternetSetOption(
        int hInternet,
        int dwOption,
        IntPtr lpBuffer,
        int dwBufferLength
    );
}
Run Code Online (Sandbox Code Playgroud)

您可以在流程开始时调用SupressCookiePersist,并在浏览器关闭时清除Cookie,如下所述: Facebook多帐户


mr.*_*123 10

我找到了一个解决方案,用于删除所有cookie.在url上找到的示例,删除应用程序(进程)启动时的cookie.

http://mdb-blog.blogspot.com/2013/02/c-winforms-webbrowser-clear-all-cookies.html

解决方案是使用InternetSetOption 函数来通知WEBBROWSER清除其所有内容.

int option = (int)3/* INTERNET_SUPPRESS_COOKIE_PERSIST*/;
int* optionPtr = &option;

bool success = InternetSetOption(0, 81/*INTERNET_OPTION_SUPPRESS_BEHAVIOR*/, new IntPtr(optionPtr), sizeof(int));
if (!success)
{
    MessageBox.Show("Something went wrong !>?");
}
Run Code Online (Sandbox Code Playgroud)

请注意,仅在MSDN INTERNET_OPTION_SUPPRESS_BEHAVIOR上写入时清除特定PROCESS的cookie :

用于在整个流程范围内抑制行为的通用选项.