0

ログインしてPHP 5 Webアプリケーションと対話するデスクトップアプリ(Delphi XE2で開発)があります( TankAuthとともにCodeIgniter 2.1を使用します-両方とも最新バージョン)

セッションのハイジャックを防ぐために、TankAuth にはセッション期限切れ機能 (5 分ごとに起動) があるようですセキュリティ対策としては良いのですが…

これにより、Delphi アプリケーションのログインも無効になります。より具体的には、Cookie を更新する必要があります (私は Indy 10.4861 を使用しています)。つまり、5 分ごとに再ログインする必要があります。

私の 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

私の質問は次のとおりです。セッションの有効期限を維持する方法はありますか?


編集

グローバル 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;
4

0 に答える 0