会话cookie与indy

时间:2012-01-27 23:24:36

标签: delphi delphi-xe2 indy

我必须浏览一个与indy的idhttp保持会话ID的网站。

我使用以下代码初始化我需要的组件。

procedure InitSession;
begin
  Initalized := True;
  try
  ihttp := TIdHTTP.Create(nil); //the variables are declared globally
  idCookie := TIdCookieManager.Create(nil);
  ihttp.ConnectTimeout := 5000;
  ihttp.AllowCookies := true;
  ihttp.HandleRedirects := true;
  ihttp.CookieManager := idCookie;
  except
  Initalized := False;
  end;
end;

问题是我在发出请求时没有发送cookie。为了发送包含会话ID的cookie,我需要做什么。感谢

2 个答案:

答案 0 :(得分:6)

如果在新请求中没有发回cookie,则TIdCookieManager在收到cookie时拒绝cookie,或者将接受的cookie与新请求不匹配。您能否显示发送cookie的实际Set-Cookie响应标头,以及您认为cookie未正确发送回的URL?您是否在收到cookie后验证它是否在发送新请求之前最终在TIdCookieManager

您使用的是哪个版本的Indy?在2011年之前,早期版本的Indy 10确实破坏了基本上无法使用的cookie处理。但是在2011年初,IdCookieManager.pasIdCookie.pas从头开始重新编写,自2011年5月以来一直运作正常,我没有看到任何关于cookie处理不当的新报告。

答案 1 :(得分:0)

没有DOMAIN属性的Cookie是否存在问题? DXE2附带的IdCookie无法解析没有MAX-AGE属性的Cookie,DO具有EXPIRES属性,并且没有DOMAIN属性。请参阅IdCookie.pas 675,了解S似乎有一个意外的值(解析expires属性时遗留下来)。