Как очистить кэш и файлы cookie для встроенного браузера Chromium?

Я создал браузер с TChromium. Хромий создается динамически. Доступ к Facebook (логин) В конце процесса, компонент разрушается. Проблема возникает при повторном создании компонента Он продолжает предыдущую сессию (login). Мне нужно очистить весь кэш и cookies. (Force Log out)

ниже кода я создаю компонент по:

var
   Chromium: TChromium;
begin
   try
     Chromium := TChromium.Create(nil);
     Chromium.SetParentComponent(Form1);
     Chromium.Align := alClient;
     chromium.Browser.MainFrame.LoadUrl('www.facebook.com');

я уничтожаю его и освобождаю память следующим образом:

FreeAndNil(Chromium)

что я должен делать?

2 ответов


DCEF1:

для удаления cookies в оболочке DCEF1 есть на ICefCookieManager интерфейс менеджера. Тем не менее, я пробовал следующий код для удаления всех файлов cookie, но мне всегда не удавалось:

procedure TForm1.Button1Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.GetGlobalManager;
  if not CookieManager.DeleteCookies('', '') then
    ShowMessage('DeleteCookies failed!');
end;

к счастью, есть еще один вариант удаления файлов cookie с помощью этого менеджера файлов cookie. Посетите все из них и в функции посетителя назначьте True для deleteCookie выходной параметр. Будьте осторожны с получением cookie manager, он создал первый раз, когда вы ориентируетесь где-то (GetGlobalManager функция класса небезопасна, она неправильно обрабатывается для неожиданного результата), поэтому убедитесь, что вы будете использовать этот код после навигации:

procedure TForm1.Button1Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.GetGlobalManager;
  CookieManager.VisitAllCookiesProc(
    function(const name, value, domain, path: ustring; secure, httponly,
      hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
      count, total: Integer; out deleteCookie: Boolean): Boolean
    begin
      deleteCookie := True;
      ShowMessage('A cookie from domain ' + domain + ' will be unmercifully ' +
        'deleted!');
    end
  );
end;

DCEF3:

в оболочке DCEF3 вы можете использовать следующее. Заслуга Эрик Сантос:

type
  CefTask = class(TCefTaskOwn)
    procedure Execute; override;
  end;

procedure CefTask.Execute;
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.Global;
  CookieManager.DeleteCookies('', '');
end;

procedure ClearCookies;
var
  Task: CefTask;
begin
  Task := CefTask.Create;
  CefPostTask(TID_IO, Task);
end;

TLama ваша помощь была решающей для моего проекта. Я благодарен за обмен опытом.

решил мою проблему с этим кодом:

procedure TForm1.Button1Click(Sender: TObject);
var
  CookieManager: ICefCookieManager;
begin
  CookieManager := TCefCookieManagerRef.GetGlobalManager;
  CookieManager.VisitAllCookiesProc(
    function(const name, value, domain, path: ustring; secure, httponly,
      hasExpires: Boolean; const creation, lastAccess, expires: TDateTime;
      count, total: Integer; out deleteCookie: Boolean): Boolean
    begin
      deleteCookie := True;
      ShowMessage('A cookie from domain ' + domain + ' will be unmercifully ' +
        'deleted!');
    end
  );
end;

обнимашки