Search code examples
delphicookiessetcookiechromium-embedded

How to set different cookies for different instances of Chromium embedded browser


I'm working on an application that requires multiple embedded instances and each of this instance logins to the same external site with different authentication details.

I'm using CEF (Chromium embedded framework ) in Delphi , I have a folder that i stored the cookies on it for different instance of my browsers , So i have this code in the first unit

     procedure TForm2.Button1Click(Sender: TObject);
begin

  form33 := Tform3.Create(nil);

  form33.Show;
end;

when the form33 created

    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;

The problem is that when i open two or more of instances of the form33 , i can't have for each browser in each form33 a specific cookie ...


Solution

  • You should create a new manager for each instance by TCefCookieManagerRef.New(Path) and store the returned reference into some private field of your form. Then you need to return the stored reference to the Result parameter of the OnGetCookieManager event method:

    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;