TChromium: как сохранить сеанс

Как я могу сохранить сеанс при использовании DCEF3 TChromium?

Например, если я захожу на веб-сайт и вхожу на него, когда я закрываю свое приложение и открываю его снова, мне нужно снова войти в систему. Я хочу сохранить сеанс, как если бы я использовал Google Chrome.

Я попытался добавить «CefLib» в пункт «uses» моего приложения и установить «CefCache», как в приведенном ниже коде, но, хотя я вижу файлы, хранящиеся в папке «cookies», похоже, это не имеет значения для сохранения сеанса:

program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  ceflib in 'C:\app\dcef\src\ceflib.pas';

{$R *.res}

begin
  CefCache := 'cookies';
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Заранее спасибо.


person delphirules    schedule 05.01.2016    source источник
comment
Видите ли вы какие-либо файлы cookie, сохраняемые TChromium? См. stackoverflow.com/a/23723741/80901 код для установки пути хранения файлов cookie.   -  person mjn    schedule 05.01.2016
comment
@mjn решение по этой ссылке, похоже, использует устаревшую версию DCEF, код не компилируется.   -  person delphirules    schedule 05.01.2016
comment
Хорошо, что угодно... Если браузер не сохраняет файл cookie идентификатора сеанса, возобновление невозможно, поэтому вопрос остается: видите ли вы какие-либо файлы cookie, которые сохраняются?   -  person mjn    schedule 05.01.2016
comment
Я не вижу файлов cookie, сохраняемых в папке, которую я указал в папке «CefCache».   -  person delphirules    schedule 05.01.2016
comment
Итак, следующим шагом будет изучение исходного кода TChromium, чтобы узнать, есть ли способ сделать файлы cookie постоянными и загрузить их с диска при запуске приложения.   -  person mjn    schedule 05.01.2016
comment
После изменения «CefCache» на «cookies» я вижу, что папка с этим именем создается в папке моего приложения, и действительно, там создаются файлы. Но даже в этом случае, когда я закрываю и открываю приложение, данные сеанса теряются...   -  person delphirules    schedule 05.01.2016
comment
Итак, следующим шагом будет изучение исходного кода TChromium, чтобы узнать, есть ли способ загрузить файлы cookie с диска при запуске приложения.   -  person mjn    schedule 05.01.2016
comment
Спасибо за помощь, попробую сделать. TChromium — отличный компонент, жаль, что документации почти нет…   -  person delphirules    schedule 05.01.2016
comment
Каков срок жизни этих файлов cookie? Генерирует ли сайт постоянные файлы cookie (для них не определена продолжительность жизни или определенная продолжительность жизни составляет длительный период — я полагаю, более чем в месяц), краткосрочные файлы cookie (их продолжительность жизни обычно составляет менее одного дня) или, возможно, на основе сеанса файлы cookie означают, что они действительны только до тех пор, пока не будет закрыто последнее окно/вкладка определенного сайта? Также проверьте настройки управления файлами cookie. если ваш браузер настроен так, чтобы не разрешать постоянные файлы cookie, они никогда не будут созданы сайтом, который вы посещаете.   -  person SilverWarior    schedule 05.01.2016
comment
@SilverWarior Я тестирую Facebook, я вхожу в систему со своим именем пользователя и паролем. Затем я закрываю свое приложение, и когда я открываю его снова, Facebook больше не регистрируется.   -  person delphirules    schedule 05.01.2016
comment
@delphirules Это потому, что по умолчанию Facebook использует файлы cookie на основе сеанса. Вы можете попросить Facebook создать постоянный файл cookie, установив флажок «Запомнить меня» перед входом в Facebook. И если ваш браузер настроен на прием постоянных файлов cookie, закрытие и повторное открытие вашего приложения не должны требовать от вас повторного входа в систему. Это возможно, если в TChromium не может быть специальной настройки для сохранения файлов cookie на основе текущего активного сеанса самого TChromium (что-то похожее на просмотр InPrivate в Internet Explorer).   -  person SilverWarior    schedule 05.01.2016
comment
@SilverWarior В моем тесте я установил флажок «Оставаться в системе», но даже в этом случае, когда я закрываю и открываю свое приложение, я больше не вхожу в систему. Должны быть какие-то настройки в TChromium, чтобы заставить его работать, но я пока не мог понять...   -  person delphirules    schedule 05.01.2016
comment
too bad there is nearly no documentation - ну, это проект с открытым исходным кодом. Проекты с открытым исходным кодом зависят от поддержки сообщества и/или пожертвований.   -  person mjn    schedule 05.01.2016
comment
@mjn, вы правы, и действительно, я связался с разработчиком, предложив пожертвование. он примет в следующем крупном обновлении ;)   -  person delphirules    schedule 05.01.2016


Ответы (1)


Парень с официального форума DCEF3 предоставил приведенное ниже решение, протестировал и одобрил!

CookieManager: ICefCookieManager;

FormCreate:
begin
   CookiesPath := ExtractFilePath(Application.ExeName) + 'cookies';
   CookieManager := TCefCookieManagerRef.Global(nil);
   CookieManager.SetStoragePath(CookiesPath, True, nil);
end;

FormClose:   
begin
  CookieManager.FlushStore(nil);
end
person delphirules    schedule 06.01.2016