Pregunta ¿Cómo elimino el caché y las cookies de un navegador Chromium incrustado?


Creé un navegador con TChromium. El TChromium se crea dinámicamente. Acceso a Facebook (iniciar sesión) Al final del proceso, el componente se destruye. El problema ocurre cuando el componente se crea de nuevo Él continúa con la sesión anterior (inicio de sesión). Necesito limpiar todo el caché y las cookies. (Forzar cierre de sesión)

Debajo del código creo el componente por:

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

Lo destruyo y lanzo memoria así:

FreeAndNil(Chromium)

¿Que debería hacer?


6
2017-09-04 18:48


origen


Respuestas:


DCEF1:

Para eliminar las cookies en el envoltorio DCEF1 está el DeleteCookies funcionar en ICefCookieManager interfaz del administrador. Sin embargo, probé el siguiente código para eliminar todas las cookies, pero siempre me falló:

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

Afortunadamente, hay otra opción para eliminar cookies utilizando este administrador de cookies. Visítelos a todos y en la función de visitante asigne True al deleteCookie parámetro de salida Tenga cuidado al obtener el administrador de cookies, se crea la primera vez que navega en algún lugar (el GetGlobalManager la función de clase no es segura, no se maneja adecuadamente por un resultado inesperado), así que asegúrese de usar este código después de la navegación:

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:

En el contenedor DCEF3 puede usar lo siguiente. El crédito va a Eric Santos:

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;

5
2017-09-04 22:26



TLama tu ayuda fue decisiva para mi proyecto. Estoy agradecido por compartir tu experiencia.

Resolví mi problema con este código:

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;

abrazo


1
2017-09-07 06:35