【问题标题】:CefSharp how to clear current webpage like real browser does when closing the tabCefSharp如何在关闭选项卡时像真正的浏览器一样清除当前网页
【发布时间】:2020-06-27 16:05:28
【问题描述】:

我有一个网站,用户可以登录那里访问他们的个人资料。 在谷歌浏览器或其他网络浏览器中,我可以打开该网站并在那里登录。 要注销网站,请向我的 web api 发送请求。 关闭标签而不注销后,我将我的网站加载到新标签中,并要求我登录。 这是一种很好的行为。

但是当我在 CefSharp Chromium 浏览器 (CefSharp.WinForms 79.1.360) 中打开此站点时,我无法自动注销用户。 我使用下一个方法清除所有数据,然后加载起始页:

await Cef.GetGlobalCookieManager().DeleteCookiesAsync(string.Empty, string.Empty);

我的设置是:

Cef.EnableHighDPISupport();
CefSharpSettings.LegacyJavascriptBindingEnabled = true;
CefSharpSettings.WcfEnabled = true;

var settings = new CefSettings();
settings.CefCommandLineArgs.Remove("disable-gpu-compositing");
Cef.Initialize(settings);

我使用下一个处理程序:

Browser = new ChromiumWebBrowser(ConfigProvider.HomeUrl)
{
   KeyboardHandler = new KeyboardHandler(),
   RequestHandler = new RequestHandler(),
   LifeSpanHandler = new LifeSpanHandler(_popupUrlsWhiteList),
   MenuHandler = new MenuHandler(),
   DownloadHandler = downloadHandler
};

但是用户没有退出。我尝试将缓存存储在本地文件夹中(使用 CefSettings),但也没有用。

此方法适用于许多使用 cookie 来存储登录用户的网站。在我清除 cookie 后,它们会自动注销。但对于这个网站,它不起作用。这个网站不使用cookies来存储登录信息,注销是通过他们的web api执行的。这个网站实际上不是我的,我没有源代码。

我可以让 CefSharp 在关闭标签时像常规的谷歌浏览器那样清除浏览器中的会话吗?

【问题讨论】:

  • 你用的是什么版本?由于您没有提供示例 url,因此您需要提供有关您网站的详细信息,它是否使用 cookie 进行会话状态?当您关闭 chrome 中的选项卡时,究竟会发生什么?您应该等待 DeleteCookiesAsync 以确认它实际上已完成并已删除 cookie 的数量。您是否指定了自己的 RequestContext?你用的是什么 CefSettings?
  • @amaitland 我已经更新了原帖。版本是 CefSharp.WinForms 79.1.360,我使用 await。我已经添加了我的 CefSettings。该站点似乎没有使用 cookie 来存储会话状态。我没有指定自己的 RequestContext 但我有自己的处理程序(更新了原帖)
  • 那么网站是如何运作的呢?铬会发生什么?您可以使用单独的 RequestContext 隔离浏览器实例,请参阅github.com/cefsharp/CefSharp/wiki/…
  • @amaitland 我尝试使用 RequestContext,但它没有做任何事情,因为我只有一个 CEF 浏览器。在 google chrome 中注销该站点从后端调用 http 方法以注销。我可以关闭 chrome 标签,然后在新标签中我将被注销。 CEF 是否支持少数选项卡?我还没有找到它的任何 API
  • 那你的http方法是怎么调用的呢?什么触发了通话?我没有TAB api,因为您必须创建自己的标签,为每个标签使用新的ChromiumWebBrowser。

标签: session cefsharp


【解决方案1】:

按下站点标题上的按钮注销用户,并向服务器发送http请求以注销用户。 我可以让Browser.GetMainFrame().ExecuteJavaScriptAsync(JsMethods.GetClearSessionMethod())自动注销用户

只做简单的工作:

localStorage.clear();
sessionStorage.clear();

问题是用户“记录的信息”存储在 sessionStorage 中,并且没有通过调用清除

await Cef.GetGlobalCookieManager().DeleteCookiesAsync(string.Empty, string.Empty);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 2013-08-02
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多