You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CEF4双Chromium实例如何配置独立Cookie路径实现同站双账号登录

CEF4 多浏览器实例独立Cookie配置方案

核心逻辑

CEF的Cookie、站点缓存、本地存储等用户数据是和CefRequestContext请求上下文绑定的,默认所有浏览器实例都会复用全局默认的请求上下文,共用你在GlobalCEFApp.cache中配置的同一份存储,因此同一站点只能保持一个登录态。要实现两个实例登录态隔离,只需要给两个实例分别绑定独立的、指定了专属存储路径的请求上下文即可,无需启动多个CEF进程。

操作步骤

  1. 调整全局CEF初始化配置
    修改原有CreateGlobalCEFApp过程中的cache配置,避免全局默认上下文占用业务存储路径:
procedure CreateGlobalCEFApp;
var
  inicef: Tinifile;
  path: string;
begin
  GlobalCEFApp := TCefApplication.Create;
  GlobalCEFApp.LogFile := 'debug.log';
  GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
  // 全局默认上下文使用独立的缓存路径,不要和业务实例的存储路径混用
  GlobalCEFApp.cache := 'cache\global_common';
  GlobalCEFApp.EnablePrintPreview := True;
  path := ExtractFilePath(ParamStr(0));
  GlobalCEFApp.DisableFeatures := 'WinUseBrowserSpellChecker';
  inicef := Tinifile.Create(path + 'settings.ini');
  GlobalCEFApp.UserAgent := Pchar(inicef.ReadString('Chrome', 'UserAgent', ''));
  inicef.free;
end;
  1. 为两个Chromium实例分别创建独立请求上下文
    在浏览器实例初始化(调用CreateBrowser方法)之前,为每个实例单独配置专属存储路径的请求上下文并绑定,示例代码如下:
// 给第一个Chromium实例配置独立存储
var
  reqCtx1: ICefRequestContext;
  ctxSettings1: TCefRequestContextSettings;
begin
  FillChar(ctxSettings1, SizeOf(ctxSettings1), 0);
  // 指定实例1专属的缓存根目录,Cookie会自动存储在该目录下
  CefString(@ctxSettings1.cache_path, 
    PChar(ExtractFilePath(ParamStr(0)) + 'cache\profile_1'));
  // 开启会话Cookie持久化,关闭程序后登录态不会丢失,不需要可设为False
  ctxSettings1.persist_session_cookies := Ord(True);
  reqCtx1 := TCefRequestContextRef.New(@ctxSettings1, nil, nil, False, False);
  Chromium1.RequestContext := reqCtx1;
end;

// 给第二个Chromium实例配置独立存储
var
  reqCtx2: ICefRequestContext;
  ctxSettings2: TCefRequestContextSettings;
begin
  FillChar(ctxSettings2, SizeOf(ctxSettings2), 0);
  // 指定实例2专属的缓存根目录,必须和实例1路径完全独立
  CefString(@ctxSettings2.cache_path, 
    PChar(ExtractFilePath(ParamStr(0)) + 'cache\profile_2'));
  ctxSettings2.persist_session_cookies := Ord(True);
  reqCtx2 := TCefRequestContextRef.New(@ctxSettings2, nil, nil, False, False);
  Chromium2.RequestContext := reqCtx2;
end;

注意事项

  • 两个实例的cache_path必须是完全独立的文件夹,不能有路径重叠,否则会出现数据串用、文件锁冲突的问题
  • 如果不需要持久化登录态,可以将对应实例的cache_path设为空,此时实例会使用内存级临时存储,关闭程序后所有Cookie、站点数据自动清除,两个实例的临时存储同样完全隔离
  • 绑定请求上下文的操作必须在浏览器实例完成初始化之前执行,已经创建完成的浏览器实例不支持中途切换请求上下文
  • 配置完成后两个实例的Cookie、LocalStorage、IndexedDB、站点缓存、权限配置等所有站点数据都会完全隔离,可直接满足同一站点同时登录两个不同账号的需求

内容的提问来源于stack exchange,提问作者Sten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:57:34