我必须浏览一个与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,我需要做什么。感谢
答案 0 :(得分:6)
如果在新请求中没有发回cookie,则TIdCookieManager
在收到cookie时拒绝cookie,或者将接受的cookie与新请求不匹配。您能否显示发送cookie的实际Set-Cookie
响应标头,以及您认为cookie未正确发送回的URL?您是否在收到cookie后验证它是否在发送新请求之前最终在TIdCookieManager
?
您使用的是哪个版本的Indy?在2011年之前,早期版本的Indy 10确实破坏了基本上无法使用的cookie处理。但是在2011年初,IdCookieManager.pas
和IdCookie.pas
从头开始重新编写,自2011年5月以来一直运作正常,我没有看到任何关于cookie处理不当的新报告。
答案 1 :(得分:0)
没有DOMAIN属性的Cookie是否存在问题? DXE2附带的IdCookie无法解析没有MAX-AGE属性的Cookie,DO具有EXPIRES属性,并且没有DOMAIN属性。请参阅IdCookie.pas 675,了解S似乎有一个意外的值(解析expires属性时遗留下来)。