【发布时间】: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方法是怎么调用的呢?什么触发了通话?我没有
TABapi,因为您必须创建自己的标签,为每个标签使用新的ChromiumWebBrowser。