Как установить разные куки для разных экземпляров браузера 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;