【问题标题】:How to set different cookies for different instances of Chromium embedded browser如何为 Chromium 嵌入式浏览器的不同实例设置不同的 cookie
【发布时间】:2014-09-18 22:25:36
【问题描述】:

我正在开发一个需要多个嵌入式实例的应用程序,并且每个实例都使用不同的身份验证详细信息登录到同一个外部站点。

我在 Delphi 中使用 CEF(Chromium 嵌入式框架),我有一个文件夹,用于存储不同浏览器实例的 cookie,所以我在第一个单元中有这段代码

     procedure TForm2.Button1Click(Sender: TObject);
begin

  form33 := Tform3.Create(nil);

  form33.Show;
end;

form33 创建时

    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;

问题是,当我打开两个或多个 form33 实例时,我无法为每个 form33 中的每个浏览器拥有一个特定的 cookie ...

【问题讨论】:

  • 您还没有说您使用的是哪个版本的 DCEF,所以我们假设您使用的是 DCEF3。您应该通过TCefCookieManagerRef.New(Path) 为每个实例创建一个新的管理器,并将返回的引用存储到表单的某个私有字段中。总之,停止使用TCefCookieManagerRef.Global
  • 好的,我正在使用 DCEF3,我刚刚尝试了您的建议,但它对我不起作用......还有其他建议吗?问题是当我在 Form33 实例中打开一个会话然后打开另一个 Form33 实例时,我发现在这个新实例的 chromium 中打开了相同的会话...... :(
  • 恐怕没有其他建议了。为 CEF 浏览器的每个实例引用 ICefCookieManager 接口就足够了,将此引用存储到私有字段,并将其返回到 OnGetCookieManager 事件方法的 Result 参数(我忘了提及在我之前的评论中)。
  • @TLama 现在可以用了,谢谢兄弟。
  • 不客气!如果您(或其他人)愿意,请随时发布答案;-)

标签: delphi cookies setcookie chromium-embedded


【解决方案1】:

您应该通过TCefCookieManagerRef.New(Path) 为每个实例创建一个新的管理器,并将返回的引用存储到表单的某个私有字段中。然后需要将存储的引用返回到OnGetCookieManager事件方法的Result参数:

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;

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 2014-08-10
    • 2020-09-20
    • 1970-01-01
    • 2021-12-19
    • 2016-03-17
    • 1970-01-01
    • 2020-03-04
    相关资源
    最近更新 更多