zoukankan      html  css  js  c++  java
  • 【总结】清除webbrowser cookie/session的6种方法

    下面是我测试下来的6种清除webbrowser中cookie的6种方法:

    复制代码
                //方法一:调用 wininet.dll清除cookie (推荐)
                SuppressWininetBehavior();
    
                //方法二:删除用户登录后的信息,这里相当于浏览器的注销功能,使用的是ie自带的功能 (推荐)
                HtmlDocument document = wb.Document;
                document.ExecCommand("ClearAuthenticationCache", false, null);
    
                //方法三:删除本机cookie 此方法会弹出ie清除cookie的弹出框
                //Temporary Internet Files  (Internet临时文件)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
                //Cookies
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
                //History (历史记录)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
                //Form. Data (表单数据)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
                //Passwords (密码)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
                //Delete All  (全部删除)
                //ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 2", "", ShowCommands.SW_HIDE);
                ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_HIDE);
    
    
                //方法四:使用webbrowser自带的清coookie的方法 (不推荐,清不掉session,实测无效)
                wb.Document.Cookie.Remove(0, (wb.Document.Cookie.Count() - 1));
    
                //方法五:使用js清除cookie (不推荐,清不掉session)
                wb.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());}}}})())");
                //var a,b,c,e,f;
                //f=0;
                //a=document.cookie.split('; ');
                //b='.'+'baidu.com';
                ////b='.'+'www.baidu.com';
                //for(e=0;e<a.length;e++){
                //    //b='.'+location.host;
                //    b=b.replace(/^(?:%5C.|[^%5C.]+)/,'');
                //    c=location.pathname;
                //    c=c.replace(/.$/,'');
                //    ck = a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString();
                //    console.log(ck);
                //    document.cookie=ck;
                //}
    
                //方法六:使用InternetSetCookie给cookie赋null值 (不推荐)
                //也可以给此Cookie赋空值:InternetSetCookie
                //InternetSetCookie("http://.qq.com/", NULL, "uin=; PATH=/; DOMAIN=qq.com");
    复制代码

    方法一:

    复制代码
        [System.Runtime.InteropServices.DllImport("wininet.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
            public static extern bool InternetSetOption(int hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
    
    
            /// <summary>
            /// 使用InternetSetOption操作wininet.dll清除webbrowser里的cookie
            /// </summary>
            private static unsafe void SuppressWininetBehavior()
            {
                /* SOURCE: http://msdn.microsoft.com/en-us/library/windows/desktop/aa385328%28v=vs.85%29.aspx
                    * INTERNET_OPTION_SUPPRESS_BEHAVIOR (81):
                    *      A general purpose option that is used to suppress behaviors on a process-wide basis. 
                    *      The lpBuffer parameter of the function must be a pointer to a DWORD containing the specific behavior to suppress. 
                    *      This option cannot be queried with InternetQueryOption. 
                    *      
                    * INTERNET_SUPPRESS_COOKIE_PERSIST (3):
                    *      Suppresses the persistence of cookies, even if the server has specified them as persistent.
                    *      Version:  Requires Internet Explorer 8.0 or later.
                    */
                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 ! Clear Cookie Failed!");
                }
    
            }
    复制代码

     

    方法二:

    就只有这一句就好了:

     //方法二:删除用户登录后的信息,这里相当于浏览器的注销功能,使用的是ie自带的功能 (推荐)
                HtmlDocument document = wb.Document;
                document.ExecCommand("ClearAuthenticationCache", false, null);

    方法三:

    复制代码
     //方法三:删除本机cookie 此方法会弹出ie清除cookie的弹出框
                //Temporary Internet Files  (Internet临时文件)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
                //Cookies
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
                //History (历史记录)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
                //Form. Data (表单数据)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
                //Passwords (密码)
                //RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
                //Delete All  (全部删除)
                //ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 2", "", ShowCommands.SW_HIDE);
                ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_HIDE);
    复制代码
    ShellExecute方法:
    复制代码
        public enum ShowCommands : int
            {
    
                SW_HIDE = 0,
    
                SW_SHOWNORMAL = 1,
    
                SW_NORMAL = 1,
    
                SW_SHOWMINIMIZED = 2,
    
                SW_SHOWMAXIMIZED = 3,
    
                SW_MAXIMIZE = 3,
    
                SW_SHOWNOACTIVATE = 4,
    
                SW_SHOW = 5,
    
                SW_MINIMIZE = 6,
    
                SW_SHOWMINNOACTIVE = 7,
    
                SW_SHOWNA = 8,
    
                SW_RESTORE = 9,
    
                SW_SHOWDEFAULT = 10,
    
                SW_FORCEMINIMIZE = 11,
    
                SW_MAX = 11
    
            }
    
            [DllImport("shell32.dll")]
            static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);
    复制代码

    方法四:

      //方法四:使用webbrowser自带的清coookie的方法 (不推荐,清不掉session,实测无效)
                wb.Document.Cookie.Remove(0, (wb.Document.Cookie.Count() - 1));

    方法五:

    复制代码
     //方法五:使用js清除cookie (不推荐,清不掉session)
                wb.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());}}}})())");
                //var a,b,c,e,f;
                //f=0;
                //a=document.cookie.split('; ');
                //b='.'+'baidu.com';
                ////b='.'+'www.baidu.com';
                //for(e=0;e<a.length;e++){
                //    //b='.'+location.host;
                //    b=b.replace(/^(?:%5C.|[^%5C.]+)/,'');
                //    c=location.pathname;
                //    c=c.replace(/.$/,'');
                //    ck = a[e]+'; domain='+b+'; path='+c+'; expires='+new Date((new Date()).getTime()-1e11).toGMTString();
                //    console.log(ck);
                //    document.cookie=ck;
                //}
    复制代码

    将 wb.Navigate("javascript:void((function(){。。。}里的内容换成下面注释掉的代码,写好你要清cookier 的domain然后就可以清了,但清不掉session,这个是从外国网站上看来的,实际无效!

    方法六:

     //方法六:使用InternetSetCookie给cookie赋null值 (不推荐)
                //也可以给此Cookie赋空值:InternetSetCookie
                //InternetSetCookie("http://.qq.com/", NULL, "uin=; PATH=/; DOMAIN=qq.com");

    关于InternetSetCookie这个方法自己网上搜索一下.

  • 相关阅读:
    linux整理
    C++ 11 多线程--线程管理
    VS2013 配置全局 VC++目录
    visual studio运行时库MT、MTd、MD、MDd的研究
    C++(vs)多线程调试 (转)
    VS工程和Qt工程转换
    Qt 读写XML文件
    win32开发中多字节(ANSI)和宽字符(UNICODE)字符串处理函数参考
    QMenu----QT鼠标右键弹出菜单
    C++ 单例模式析构函数的运用,析构函数的线程安全
  • 原文地址:https://www.cnblogs.com/soundcode/p/10778781.html
Copyright © 2011-2022 走看看