6

TChromiumでブラウザを作成しました。TChromiumは動的に作成されます。Facebookアクセス(ログイン)プロセスの最後に、コンポーネントは破棄されます。コンポーネントが再度作成されると、問題が発生します。彼は前のセッション(ログイン)を続行します。すべてのキャッシュとCookieをクリーンアップする必要があります。(強制ログアウト)

コードの下で、次の方法でコンポーネントを作成します。

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

私はそれを破壊し、次のようにメモリを解放します:

FreeAndNil(Chromium)

私は何をすべきか?

4

2 に答える 2

5

DCEF1

DCEF1ラッパーのCookieを削除するには、マネージャーインターフェイスにDeleteCookies機能があります。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を削除する別のオプションがあります。それらすべてにアクセスし、visitor関数でdeleteCookie出力パラメーターにTrueを割り当てます。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ラッパーでは、次を使用できます。クレジットはEricSantosに送られます

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;
于 2012-09-04T22:26:39.617 に答える
1

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;

抱擁

于 2012-09-07T06:35:59.887 に答える