ログインして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;