Функция истечения сеанса TankAuth недействительна для моего рабочего стола Delphi

I have a desktop app (developed with Delphi XE2) that login & interacts with a PHP 5 web application (I use CodeIgniter 2.1 along with TankAuth - both latest version)

Кажется, что TankAuth имеет функцию истечения сеанса (которая пинает каждые 5 минут ), чтобы предотвратить захват сеанса. Это хорошая мера безопасности, но ...

This also invalidate the Delphi application login. More specifically, I need to update cookies (I use Indy 10.4861), which means I have to re-login every 5 minutes

Приложение My Delphi XE2 использует многопоточность. Я использую глобальный файл cookie (чтобы не регистрироваться в каждом потоке!), Поэтому мне нужно разрешить блокировку каждые 5 минут для повторного входа в систему.

Мой профайлер ясно говорит, что мне нужно что-то сделать!

Мой код выглядит так:

TheResponse   := TStringStream.Create;
try
   IdHttp.Get(TheURL, TheResponse);

   if (TheResponse <> nil) And (Pos('login', TheResponse.DataString) <> 0) then
   begin
        OmniLock.Acquire;
        try
           LoginToServer(ServerLogin, UserPassword);
        finally
               OmniLock.Release;
        end;   //try/finally

       //Reload local copie of the cookies manager
        OmniLock.Acquire;
        try
           TheCookieManager.AddCookies(GlobalCookieManager);
        finally
               OmniLock.Release;
        end;   //try/finally
except
     //...
end;   //try/except

My question is: Is there a way to keep the session expire, but somehow capture the changed session expire and update the cookie manager without having to re-login?


<Сильный> ИЗМЕНИТЬ

Глобальный менеджер файлов cookie обновляется всякий раз, когда появляется новый файл cookie:

idHTTP.OnNewCookie := SyncNewCookie;

// ------------------------------------------------------------------------------ //
procedure TMainForm.SyncNewCookie(ASender : TObject; ACookie : TIdCookie; var VAccept : Boolean);
begin
     VAccept := True;

     OmniLock.Acquire;
     try
        GlobalCookieManager.CookieCollection.AddServerCookie(ACookie.ServerCookie, TIdHTTP(TIdCookieManager(ASender).Owner).URL);
     finally
            OmniLock.Release;
     end;   //try/finally
end;
0
nl ja de
Профилисты не принимают решения. Они не говорят, что вам нужно что-либо делать. Они просто сообщают, где ваша программа проводила время. Вы заметили, что ваша программа работает медленно? И в течение этих медленных времен вы определили, что код, показанный здесь, в настоящее время работает? Если нет, то этот код не является проблемой.
добавлено автор Rob Kennedy, источник
возможный дубликат CodeIgniter "sess_time_to_update" и Indy Cookies . Это не Tank-Auth с истечением сеанса; это код воспламенителя. Вместо повторного входа в систему просто отслеживайте каждый куки-файл сеанса, который вы получаете от всех своих других транзакций. Тогда ваш сеанс не истечет.
добавлено автор Rob Kennedy, источник
Синхронизация с глобальным менеджером файлов cookie при входе в систему . Вам нужно использовать глобальный менеджер файлов cookie для each , а не только для входа в систему. Каждый раз, когда вы нажимаете на сервер, сервер либо продлевает срок действия идентификатора сеанса, который вы передали, либо заменяет его новым идентификатором сеанса. В любом случае вам нужно взять cookie сеанса, который вы получаете от этой операции, и поделиться им, чтобы все последующие поездки на сервер использовали обновленный идентификатор сеанса. Вам не нужно регистрироваться более одного раза.
добавлено автор Rob Kennedy, источник
@RobKennedy: Я просто пытался сказать, что я не доволен скоростью (да, я это сделал), ни с самим замком. У меня есть (что я считаю) проблемой. При повторном подключении меня замедляет, проблема сама по себе . Браузер успешно справляется с истечением сеанса, поэтому мое приложение delphi, таким образом, мой вопрос.
добавлено автор TheDude, источник
Нет, это не так. I уже синхронизирует глобальный менеджер файлов cookie, поэтому он должен быть чем-то другим.
добавлено автор TheDude, источник
Мои извинения, я забыл опубликовать код update cookie . Я действительно обновляю глобальный менеджер файлов cookie всякий раз, когда есть новый файл cookie.
добавлено автор TheDude, источник
Фактически, согласно моим тестам, SyncNewCookie() кажется намного более опасным чем блокировка повторного входа
добавлено автор TheDude, источник
@TheDude - вы уверены, что OnNewCookie запускается по каждому запросу? Если нет, то что в сырых заголовках?
добавлено автор Leonardo Herrera, источник
Delphi & Lazarus
Delphi & Lazarus
274 участник(ов)

Чат про Delphi и Lazarus