Как установить разные куки для разных экземпляров браузера Chromium

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

Я использую CEF (Chromium Embedded Framework) в Delphi, у меня есть папка, в которой я хранил куки на разных экземплярах моих браузеров, поэтому у меня этот код в первом блоке

     procedure TForm2.Button1Click(Sender: TObject);
begin

  form33 := Tform3.Create(nil);

  form33.Show;
end;

когда форма33 создана

    procedure TForm3.FormCreate(Sender: TObject);
var
  CookieManager: ICefCookieManager;
  folder: string;

begin

  Randomize;

  Chromium1.SetBrowserID(Random(1244));

  folder := Randomtext(5);
  if DirectoryExists(folder) = False then
    MkDir(folder);

  CookieManager := TCefCookieManagerRef.Global;
  path := ExtractFilePath(Application.ExeName) + folder;

  CookieManager.SetStoragePath(path, true);

end;

Проблема в том, что когда я открываю два или более экземпляров формы33, я не могу иметь для каждого браузера в каждой форме33 определенный файл cookie ...

1 ответ

Решение

Вы должны создать новый менеджер для каждого экземпляра TCefCookieManagerRef.New(Path) и сохраните возвращенную ссылку в каком-то приватном поле вашей формы. Затем вам нужно вернуть сохраненную ссылку на Result параметр OnGetCookieManager метод события:

type
  TForm1 = class(TForm)
    Chromium1: TChromium;
    procedure FormCreate(Sender: TObject);
    procedure Chromium1GetCookieManager(Sender: TObject;
      out Result: ICefCookieManager);
  private
    FCookieManager: ICefCookieManager2;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  FCookieManager := TCefCookieManagerRef.New('C:\UniquePathToTheCookieStorage');
end;

procedure TForm1.Chromium1GetCookieManager(Sender: TObject;
  out Result: ICefCookieManager);
begin
  Result := FCookieManager;
end;
Другие вопросы по тегам