如何强制WebBrowser控件使用新会话或清除会话

5
在我的应用程序中,用户通过点击菜单打开多个选项卡。每个选项卡都是动态创建的,包含用于加载URL的WebBrowser控件
每个URL都指向同一台服务器,但有些URL没有访问权限,因此会收到“资源不可访问”的错误信息。
现在问题是,例如,如果用户直接点击菜单3并加载相关选项卡的WebBrowser URL,然后跟随到下一个页面,其中包含其他弹出链接,则可以正常工作并能够弹出该链接的URL。
现在,用户点击没有访问权限的菜单5,因此会出现资源不可访问(被服务器拒绝)的错误。这很好。现在,再次到达菜单3并尝试打开子链接以弹出对话框,则会出现403禁止访问的错误-拒绝访问。 它最初可以工作,但后来出现了这个错误。
看起来,我需要清除WebBrowser控件缓存或强制启动新会话。
请问有人可以指导我如何强制WebBrowser启动新会话或删除早期的缓存吗?
2个回答

6

有一个更好的替代方案。它使用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控件将忘记其内存中保存的任何会话。


6
WebBrowser控件的缓存和Internet Explorer的缓存是一样的。您有以下几个选项:
1)彻底清除缓存(也会清除Internet Explorer!): https://dev59.com/LHI-5IYBdhLWcg3w8NOB#24401521 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)

方法三是最简单的。 - JohnKiller
1
#3和#4有什么影响?你只是为100000个实例存储cookie吗? - firebellys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接