Search code examples
delphiindyshirodelphi-2007indy10

IdHTTP and IdCookieManager miss one cookie


I use TIdHTTP for web-service request, after autentification I must keep session information but IdCookieManager seems lost always one cookie...

This is my very simple snippet

procedure TForm1.Button5Click(Sender: TObject);
var
  i : Integer;
  Cookie : TIdCookies;
begin
  Memo1.Lines.Clear;
  try
    IdHTTP1.AllowCookies := true;
    IdHTTP1.CookieManager := IdCookieManager1;

    IdHTTP1.Get(Edit2.Text);

    if IdCookieManager1.CookieCollection.Count = 0
     then Memo1.Lines.Add('Empty');

    Cookie := IdCookieManager1.CookieCollection;


    for i := 0 to Cookie.Count -1 do
      Memo1.Lines.Add(Cookie.Cookies[i].Domain + ': ' + Cookie.Cookies[i].CookieName +
        '=' + Cookie.Cookies[i].Value);

  except
    on E : Exception do
      Memo1.Lines.Add(E.Message);
  end;
end;

For example if I do IdHTTP1.Get('www.google.com'); I get two cookie (1P_JAR,NID), but if I do on a web browser it give three (1P_JAR,NID and CONSENT).

And this is for all URL, It seems like it "loses" always one cookie


Solution

  • You're trying to compare a single GET request response to a browser response. It's not the same thing.

    If you use e.g. Postman you will get the very same result (2 cookies for www.google.com).

    I think you should modify the service server side if you are in control of it or consume it in a different way if you are not.