四联光电智能照明论坛

标题: 清除webBrowser 缓存和Cookie的解决方案 [打印本页]

作者: admin    时间: 2016-11-6 09:57
标题: 清除webBrowser 缓存和Cookie的解决方案

通过测试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))
复制代码


作者: admin    时间: 2016-11-6 10:00
wb.Document.Cookie直接操作一点效果也没有,也无提示,但就是没反应,为啥???
作者: admin    时间: 2016-11-6 10:02
http://stackoverflow.com/questio ... s-from-windows-form
作者: admin    时间: 2016-11-6 10:03
https://social.msdn.microsoft.co ... forum=csharpgeneral
作者: admin    时间: 2016-11-6 12:42
[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]

public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData);
作者: admin    时间: 2016-11-6 13:05
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很重要啊!
作者: admin    时间: 2016-11-6 13:47
  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文件,也没法正常登录网站。
请问我是哪里作错了吗?上面的是我从中抽取出来的代码。

作者: admin    时间: 2016-11-6 22:39

        //这个方法可以创建一个清除当前页面下指定域的所有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")


作者: admin    时间: 2016-11-6 22:45
        [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呀
作者: admin    时间: 2016-11-6 22:45





欢迎光临 四联光电智能照明论坛 (http://5xhome.com/) Powered by Discuz! X3.2