title: Delphi - Indy (IDHTTP) Keep Session
body: <p>Ok, I have Idhttp created dynamically like the following</p>
  
  <pre><code>
  procedure TForm1.Button1Click(Sender: TObject);
  Var
     Resp : String;
  begin
       Resp := webSession('https://www.website.com'); // HTTPS site requires session to keep alive
       if Length(Resp)>0 then
          MessageDlg('Got the body ok',mtInformation,[mbOk],0);
  end;
  
  function TForm1.webSession(sURL : ansistring) : ansistring;
  var
     SStream    : Tstringstream;
     HTTPCon    : TIdHTTP;
     AntiFreeze : TIdAntiFreeze;
     CompressorZLib: TIdCompressorZLib;
     ConnectionIntercept: TIdConnectionIntercept;
     SSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
     CookieManager: TIdCookieManager;
  begin
      CompressorZLib :=  TIdCompressorZLib.Create;
      ConnectionIntercept :=TIdConnectionIntercept.Create;
      SSLIOHandlerSocketOpenSSL :=  TIdSSLIOHandlerSocketOpenSSL.Create;
       Result := '';
       if Length(SettingsForm.edtProxyServer.text) >= 7 then  // 0.0.0.0
       Try
          SStream := NIL;
          AntiFreeze := NIL;
          HTTPCon := NIL;
          Try
             SStream := tstringstream.Create('');
             { Create & Set IdHTTP properties }
             HTTPCon := TIdHTTP.create;
             HTTPCon.AllowCookies:=true;
             HTTPCon.CookieManager :=CookieManager;
             HTTPCon.Compressor := CompressorZLib;
             HTTPCon.Intercept := ConnectionIntercept;
             HTTPCon.IOHandler := SSLIOHandlerSocketOpenSSL;
             HTTPCon.HandleRedirects := true;
             { Check Proxy }
             if checkproxy('http://www.google.com') then
             Begin
                  HTTPCon.ProxyParams.ProxyServer := SettingsForm.edtProxyServer.text;
                  HTTPCon.ProxyParams.ProxyPort := StrToInt(SettingsForm.edtProxyPort.Text);
                  HTTPCon.ProxyParams.BasicAuthentication := True;
                  HTTPCon.ProxyParams.ProxyUsername := SettingsForm.edtProxyServer.Text;
                  HTTPCon.ProxyParams.ProxyPassword := SettingsForm.edtProxyUserName.Text;
             End;
             { Create another AntiFreeze - only 1/app }
             AntiFreeze := TIdAntiFreeze.Create(nil);
             AntiFreeze.Active := true;
             HTTPCon.Get(sURL,SStream);
             Result := UTF8ToWideString(SStream.DataString);
          Finally
             If Assigned(HTTPCon) then FreeAndNil(HTTPCon);
             If Assigned(AntiFreeze) then FreeAndNil(AntiFreeze);
             If Assigned(SStream) then FreeAndNil(SStream);
             If Assigned(CookieManager) then FreeAndNil (CookieManager );
             If Assigned(CompressorZLib) then FreeAndNil (CompressorZLib );
             If Assigned(ConnectionIntercept) then FreeAndNil (ConnectionIntercept );
             If Assigned(SSLIOHandlerSocketOpenSSL) then FreeAndNil (SSLIOHandlerSocketOpenSSL);
  
          End;
       Except
          { Handle exceptions }
          On E:Exception do
             MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
       End;
  end;
  
  function TForm1.checkproxy(sURL : ansistring) : boolean;
  var
     HTTPCon : TIdHTTP;
     AntiFreeze : TIdAntiFreeze;
  begin
       Result := False;
       Try
          { Inti vars }
          AntiFreeze := NIL;
          HTTPCon := NIL;
          Try
             { AntiFreeze }
             AntiFreeze := TIdAntiFreeze.Create(NIL);
             AntiFreeze.Active := true;
             { Create & Set IdHTTP properties }
             HTTPCon := TIdHTTP.Create(NIL);
             HTTPCon.ProxyParams.ProxyServer := SettingsForm.edtProxyServer.text;
             HTTPCon.ProxyParams.ProxyPort := StrToInt(SettingsForm.edtProxyPort.Text);
             HTTPCon.ProxyParams.BasicAuthentication := True;
             HTTPCon.ProxyParams.ProxyUsername := SettingsForm.edtProxyServer.Text;
             HTTPCon.ProxyParams.ProxyPassword := SettingsForm.edtProxyUserName.Text;
             HTTPCon.HandleRedirects := true;
             HTTPCon.ConnectTimeout := 1000;
             HTTPCon.Request.Connection := 'close';
             HTTPCon.Head(sURL);
          Finally
             { Cleanup }
             if Assigned(HTTPCon) then
             Begin
                  { Return Success/Failure }
                  Result := HTTPCon.ResponseCode = 200;
                  If HTTPCon.Connected then HTTPCon.Disconnect;
                  FreeAndNil(HTTPCon);
             End;
             if Assigned(AntiFreeze) then FreeAndNil(AntiFreeze);
          End;
       Except
          On E:EIdException do ;
          { Handle exceptions }
          On E:Exception do
             MessageDlg('Exception: '+E.Message,mtError, [mbOK], 0);
       End;
  end;
  
  </code></pre>
  
  <p>I've got a website that requires me to keep a session alive.  How would I do this?  With similar code to above.  </p>
  
  <p>If I create a visual component for everything, and use it everything is great, but when I dynamically create the component (which I REALLY want to leave it this way) it fails to keep the session alive.  </p>
  
  <p>Any help is appreciated.  </p>