Как очистить кэш и файлы 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;
обнимашки