四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4705|回复: 9
打印 上一主题 下一主题

清除webBrowser 缓存和Cookie的解决方案

[复制链接]
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    跳转到指定楼层
    楼主
    发表于 2016-11-6 09:57:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    通过测试webBrowser与IE缓存和Cookie都存放在Local Settings\Temporary Internet Files,我们可以直接调用IE API进行清除
    解决方案1:

    1. public enum ShowCommands : int
    2. {
    3. SW_HIDE = 0,
    4. SW_SHOWNORMAL = 1,
    5. SW_NORMAL = 1,
    6. SW_SHOWMINIMIZED = 2,
    7. SW_SHOWMAXIMIZED = 3,
    8. SW_MAXIMIZE = 3,
    9. SW_SHOWNOACTIVATE = 4,
    10. SW_SHOW = 5,
    11. SW_MINIMIZE = 6,
    12. SW_SHOWMINNOACTIVE = 7,
    13. SW_SHOWNA = 8,
    14. SW_RESTORE = 9,
    15. SW_SHOWDEFAULT = 10,
    16. SW_FORCEMINIMIZE = 11,
    17. SW_MAX = 11
    18. }
    复制代码

    1. [DllImport("shell32.dll")]
    2. static extern IntPtr ShellExecute( IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);
    复制代码


    //清除IE临时文件
        ShellExecute(IntPtr.Zero, "open", "rundll32.exe", " InetCpl.cpl,ClearMyTracksByProcess 255", "", ShowCommands.SW_HIDE);[/code]

    其中ClearMyTracksByProcess 可进行选择设置 :
    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  (全部删除)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255

    解决方案2:快速清除webBrowser Cookie
    1. wb.Document.Cookie.Remove(0, (wb.Document.Cookie.Count - 1))
    复制代码

  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    沙发
     楼主| 发表于 2016-11-6 10:00:31 | 只看该作者
    wb.Document.Cookie直接操作一点效果也没有,也无提示,但就是没反应,为啥???
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    板凳
     楼主| 发表于 2016-11-6 10:02:20 | 只看该作者
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    地板
     楼主| 发表于 2016-11-6 10:03:17 | 只看该作者
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    5#
     楼主| 发表于 2016-11-6 12:42:25 | 只看该作者
    [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]

    public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    6#
     楼主| 发表于 2016-11-6 13:05:41 | 只看该作者
    1、设置Cookie

    InternetSetCookie(
                         "https://" + cookie.Domain.ToString(),
                         cookie.Name.ToString(),
                         cookie.Value.ToString() + ";expires=Sun,22-Feb-2099 00:00:00 GMT");

    2、删除Cookie

    InternetSetCookie(url,NULL,L"CookieTest=ValTest;path=path value;expires=Thu, 01-Jan-1970 00:00:01 GMT");



    使用InternetSetCookie删除cookie ms没有官方文档。经过无数次的测试之后发现:

    1。 删除时一定要传入path参数,而且此参数必须和set是一致.

    2。 setcookie是不带path参数则是对当前path起作用(如果url是一个文件的话,MS有问题)

    3。 不同path值,即使cookie的名字一样也是两个不同的cookie。所以path很重要啊!
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    7#
     楼主| 发表于 2016-11-6 13:47:45 | 只看该作者
    1. using System.Runtime.InteropServices;
    2. /// <summary>   
    3.     /// 设置cookie   
    4.     /// </summary>   
    5. [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
    6. public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

    7. string cc = "ASPSESSIONIDQQTDRSSC=ALPJIHIBKHIPMCLKLENBIDOI; username=johnker; password=4725808f46c3ecce6248603e5c189de9; cnzz_a2325923=16; sin2325923; rtime=0; ltime=1330324310890";
    8.     //生成新的   
    9. foreach (string c in cc.Split(';'))
    10. {
    11.     string[] item = c.Split('=');
    12.     string name = item[0];
    13.         string value = item[1];
    14.     InternetSetCookie("www.xxxxx.cn", name, value);
    15. }            
    16. webBrowser1.Navigate("http://www.xxx.cn/admin/admin.asp?act=ArticleMng&page=");
    复制代码


    纠结中,代码可以过的去,但还是登录不成功,那个cookie值得到的是可用的,运行后去C:\Documents and Settings\Administrator\Cookies目录下也没看到相关生成的ck文件,也没法正常登录网站。
    请问我是哪里作错了吗?上面的是我从中抽取出来的代码。
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    8#
     楼主| 发表于 2016-11-6 22:39:36 | 只看该作者

            //这个方法可以创建一个清除当前页面下指定域的所有cookie
            //必须是可以访问的域,比如你访问的是qq.com,那么可以清除www.qq.com,qzone.qq.com等页面的cookie
            //但是不能清除baidu.com这样的cookie. 明白吗? 不是一个域下的是无法清除的
            public string GetClearCookieJs(string domain)
            {
                return "function delallcookie(domain){var cv=document.cookie.split('; ');var temp;for(var i=0;i<cv.length;i++){temp=cv.split('=');document.cookie=temp[0]+'=;'+((domain)?'domain='+domain+';':'')+'expires=Thu, 01-Jan-1999 00:00:01 GMT;'}} delallcookie('" + domain + "');";
            }

    //下面展示如何调用
    using mshtml;//这个using 需要从项目中添加引用Microsoft.mshtml
    //C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll
    //webBrowser1载入完成后,使用下面的语句,可以清除qq.com域下的所有cookie
    //前提是,你必须访问的是qq.com.如果你访问的不是qq.com,是无法清除qq.com域下的cookie的

    HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document.DomDocument;
    doc.parentWindow.execScript(GetClearCookieJs("qq.com"), "javascript")

  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    9#
     楼主| 发表于 2016-11-6 22:45:16 | 只看该作者
            [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);

            private void toolStripButton7_Click(object sender, EventArgs e)
            {
                MessageBox.Show(webBrowser1.Document.Cookie);
                //webBrowser1.Document.Cookie.Remove(0, webBrowser1.Document.Cookie.Length);
                //webBrowser1.Document.ExecCommand("ClearAuthenticationCache", false, null);
                //InternetSetCookie("http://www.5xhome.com","BDTUJIAID","12345");
                //MessageBox.Show(webBrowser1.Document.Cookie);

    试了好多办法都改不了webbrowser的coockie呀
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    10#
     楼主| 发表于 2016-11-6 22:45:29 | 只看该作者
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-6 23:19 , Processed in 1.078125 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表