CEFSharp отдельный CookieManager C#

Я пытаюсь создать отдельные пользовательские сеансы для каждого экземпляра браузера Chromium, но не могу найти никаких соответствующих примеров того, как это сделать. Цель состоит в том, чтобы хранить куки отдельно для каждого экземпляра браузера. Кто-нибудь может указать мне правильное направление? Я бы опубликовал соответствующий код, но пока у меня есть только основные примеры с https://github.com/cefsharp/CefSharp/tree/master/CefSharp.Example

3 ответа

В CEF3 revision 2040 добавлена ​​поддержка отдельных экземпляров браузера (кеш, куки, localStorage, права доступа и т. Д.). Во-первых, убедитесь, что у вас установлена ​​последняя версия CefSharp (которая обновлена ​​до CEF3.2526.1347).

Затем, как вы можете видеть в этом примере (строка 135), сразу после инициализации контекста браузера в OnContextInitialized Вы можете установить путь для хранения файлов cookie. API для SetStoragePath является:

Устанавливает путь к каталогу, который будет использоваться для хранения данных cookie. Если | путь | пустые данные будут храниться только в памяти. Возвращает false, если файлы cookie недоступны.

Таким образом, вы можете поэкспериментировать с файлами cookie в памяти или с другим путем для каждого из ваших экземпляров.

Если вы пытаетесь поддерживать несколько ChromiumWebBrowser экземпляры в пределах одного приложения, тогда это может еще не поддерживаться. Общая идея заключается в том, что вы создаете RequestContext и поделиться этим между ChromiumWebBrowser экземпляров.

http://magpcss.org/ceforum/apidocs3/projects/%28default%29/CefRequestContext.html

CefSharp имеет ограниченную реализацию CefRequestContext https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Wpf.Example/Views/BrowserTabView.xaml.cs#L28

Я не совсем уверен, как читать раздел о Cookie Manager в URL ниже. Я предполагаю, что это несколько недостающих частей, необходимых для того, что вы ищете, поскольку ни один из методов get cookiemanager не был реализован.

http://magpcss.org/ceforum/apidocs3/projects/%28default%29/CefRequestContext.html

http://magpcss.org/ceforum/apidocs3/projects/%28default%29/CefRequestContextHandler.html

Как сказал amaitland, это не поддерживается.

Чтобы использовать прокси с CefSharp, вы можете использовать этот код, но метод Initialize можно вызывать только один раз для каждого домена приложения.

CefSettings settings = new CefSettings();
if (string.IsNullOrEmpty(proxyAddress) == false)
{
  settings.CefCommandLineArgs.Add("proxy-server", proxyAddress);
}
//validate if the CEF instance was already initialized
if (Cef.IsInitialized == false)
  Cef.Initialize(settings, true, true);
chromeBrowser = new ChromiumWebBrowser(url);

Обходным путем может быть использование каждого экземпляра WebBrowser в другом приложении и вызов его как нового процесса.

Надеюсь это поможет

Другие вопросы по тегам