【发布时间】: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