【问题标题】:Session cookie with indy带有 indy 的会话 cookie
【发布时间】:2012-02-20 22:06:49
【问题描述】:

我必须浏览某个站点,该站点使用 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,我需要做什么。谢谢

【问题讨论】:

  • 您需要指定您正在使用的 Indy 版本,因为版本之间的功能已经发生了变化(有时会发生巨大变化)。因此,如何做事也会发生巨大变化。
  • 我建议尝试使用 Subversion 的当前 Indy 版本或每日快照

标签: delphi delphi-xe2 indy


【解决方案1】:

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

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

【讨论】:

  • 我使用的是 Delphi XE 2 ...所以当我使用 ihttp.Get() 方法时,cookie 应该是自动发送还是我必须手动设置? cookie 在 cookie 管理器中被正确接收。我该怎么做谢谢?
  • 我试过这个 ihttp.Request.CustomHeaders.Add('Cookie:'+idcookie.CookieCollection.Cookies[0].ClientCookie);但没有成功
  • Cookie 是自动处理的。同样,服务器的 Set-Cookie 标头在接收 cookie 时是什么样的?您可以从 TIdHTTP.Response.RawHeaders 属性中获取该值。之后您请求的哪个 URL 没有发送回 cookie?我需要此信息来确定 Indy 是否正常运行,或者这是否是重新设计的 cookie 管理代码中的错误。
  • 我仍然需要查看 cookie 属性的 EXACT 文本(与其说是 cookie 的数据值)而且 EXACT URL 是请求,以便我可以验证 Indy 的 cookie 管理。问题是发生在整个 deviantart 网站上还是涉及特定步骤?我花了很多时间和精力重写 Indy 的 cookie 逻辑,所以我想看看这是否是一个错误。
  • 日期:星期一,2012 年 1 月 30 日 08:35:25 GMT 服务器:Apache 缓存控制:私有 P3P:policyref="/w3c/p3p.xml",CP="NOI DSP COR CURa OUR STP" 设置 Cookie:userinfo=__e2372aec800df1792753%3B%7B%22username%22%3A%22%22%2C%22uniqueid%22%3A%221664abdab9f89df75c2974f5c749c813%22%2C%22hitcount%22%3A2%2C%22visitcount 3A2%2C%22visittime%22%3A1327912525%2C%22firstvisit%22%3A1327912525%2C%22attr%22%3A136%7D;到期=格林威治标准时间 2012 年 2 月 29 日星期三 08:35:25;路径=/; domain=.deviantart.com Transfer-Encoding: chunked Content-Type: text/html
【解决方案2】:

没有 DOMAIN 属性的 cookie 是否存在问题? DXE2 附带的 IdCookie 无法解析没有 MAX-AGE 属性、有 EXPIRES 属性和没有 DOMAIN 属性的 cookie。请参阅 IdCookie.pas 675,了解 S 似乎具有意外值的位置(解析 expires 属性后留下的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2016-04-30
    • 2020-10-26
    • 2011-12-29
    • 2014-08-21
    • 2018-05-19
    相关资源
    最近更新 更多