【问题标题】:How to Force WebBrowser Control to use New Session or clear sessions如何强制 WebBrowser 控件使用新会话或清除会话
【发布时间】:2015-09-12 01:00:48
【问题描述】:

在我的应用程序中,用户将通过单击菜单打开多个选项卡。 每个选项卡都是动态创建的,并包含 webbrowser 控件 以加载 URL。

每个 URL 都指向同一个服务器,并且某些 URL 没有访问权限,因此收到 Resource not have access 错误。

现在,问题是,例如 - 如果用户直接点击 Menu3 和加载了 webbrowser URL 的相关选项卡并按照下一步,URL 包含其他弹出链接然后它可以工作并能够弹出 URL。

现在,用户在没有访问权限的地方点击Menu5,收到此错误Resource not have access(从服务器拒绝). Its fine. NOw, again URL reach toMenu3and try to open sub link to popup dialog then it gives403 禁止错误-拒绝访问`。它最初有效,但后来它只是给出这个错误。

看起来,我需要清除WebBrowser Control 缓存或强制启动新会话。

谁能指导我如何强制 WebBrowser 开始新会话或删除早期缓存?

【问题讨论】:

    标签: c# vb.net internet-explorer webbrowser-control browser-cache


    【解决方案1】:

    WebBrowser 控件的缓存与 Internet Explorer 相同。您有多种选择:

    1) 完全清除缓存(也将清除 Internet Explorer!):

    https://stackoverflow.com/a/24401521/2633161

    2) 在服务器响应中使用一些标签:

    <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
    

    3) 使用随机查询字符串强制刷新:

    WebBrowser1.Navigate('http://www.example.com/?refresh=' & Guid.NewGuid().ToString())
    

    4) 强制刷新页面(这将加载页面 2 次!):

    WebBrowser1.Navigate('http://www.example.com/')
    WebBrowser1.Refresh(WebBrowserRefreshOption.Completely)
    

    【讨论】:

    • 方法3最简单
    • #3 和#4 的含义是什么?您是否只是为 100000 个实例存储 cookie?
    【解决方案2】:

    还有更好的选择。它使用 WinINet.DLL 并调用 SetInternetOptions

    [DllImport("wininet.dll", SetLastError = true)]
        private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
    
        private const int INTERNET_OPTION_END_BROWSER_SESSION = 42;
    
    InternetSetOption(IntPtr.Zero, INTERNET_OPTION_END_BROWSER_SESSION, IntPtr.Zero, 0);
    

    这将结束浏览器的会话缓存。调用此方法后,webbrowser 控件将忘记内存中的任何会话

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2012-04-21
      • 2013-10-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多