Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 有没有办法让印地接受过期的饼干?_Delphi_Delphi Xe2_Indy - Fatal编程技术网

Delphi 有没有办法让印地接受过期的饼干?

Delphi 有没有办法让印地接受过期的饼干?,delphi,delphi-xe2,indy,Delphi,Delphi Xe2,Indy,使用Delphi XE2 Update 4和Delphi安装的Indy components 10.5.8.0 一个我正在尝试使用的网站出于安全原因故意向我发送一个已经过期的cookie。这是他们的深思熟虑,我不得不接受它,其他与他们一起工作的开发人员也设法做到了这一点 服务器对my IdHTTP.Get的响应如下所示: Recv 8/30/2012 3:06:15 PM: HTTP/1.1 200 OK<EOL> Date: Thu, 30 Aug 2012 19:06:35 GM

使用Delphi XE2 Update 4和Delphi安装的Indy components 10.5.8.0

一个我正在尝试使用的网站出于安全原因故意向我发送一个已经过期的cookie。这是他们的深思熟虑,我不得不接受它,其他与他们一起工作的开发人员也设法做到了这一点

服务器对my IdHTTP.Get的响应如下所示:

Recv 8/30/2012 3:06:15 PM: HTTP/1.1 200 OK<EOL>
Date: Thu, 30 Aug 2012 19:06:35 GMT<EOL>
Server: Apache/2.2.3 (CentOS)<EOL>
X-Powered-By: PHP/5.1.6<EOL>
Set-Cookie: dati=eJxLtDKxqi62MrdSykyJLy1OLVKyLrYytVIyNjcxtISyc%2FLTM%2FNAbKAqt4CgYJfUMhDPEqinOB4omZ6aAuIbWilFgmkDkGGpeSWZaZkQ8wyNrZTSchKLMwryM%2FNK4ouKlaxrAYdvJUQ%3D; 
expires=Thu, 01-Jan-1970 00:03:00 GMT<EOL>
Content-Length: 16<EOL>
Connection: close<EOL>
Content-Type: text/plain;; charset=ISO-8859-1<EOL><EOL>
0 24.141.251.145
注意1970年到期!我已经使用Indy三天了,据我所知,IdHttp和相关CookieManager完全忽略了创建cookie的尝试


假设我需要接收并使用cookie,那么捕获cookie的正确方法是什么,还是我现在就尖叫着跑开?我有很多德尔福的经验,但这是我第一次进入互联网连接的奇妙世界,这个过期的饼干生意让我抓狂

发送过期cookie是Web服务器在客户端删除cookie的方式。Indy的cookie manager支持这一点。当它收到cookie时,它将删除任何具有相同名称/域/路径三元组的现有cookie,如果新cookie已经过期,它将丢弃新cookie。这是硬编码的行为


如果出于任何原因,您必须保留过期的cookie,而这是没有意义的,因为任何webclient都不应该这样做,那么您必须使用TIdCookieManager.OnNewCookie事件在TIdCookie解析cookie后但在TIdCookieManager处理之前更改cookie的过期时间。您可以将TIdCookie.Expires属性设置为未来日期,或设置为0.0以禁用其过期。无论如何,您都必须这样做,因为TIdCookieManager实现了对过期cookies的清理,每当TIdHTTP请求cookies发送HTTP请求时,就会触发该清理,因此,如果您不更改过期时间,那么cookie将在以后被丢弃。

发送过期cookie是Web服务器在客户端删除cookie的方式。Indy的cookie manager支持这一点。当它收到cookie时,它将删除任何具有相同名称/域/路径三元组的现有cookie,如果新cookie已经过期,它将丢弃新cookie。这是硬编码的行为


如果出于任何原因,您必须保留过期的cookie,而这是没有意义的,因为任何webclient都不应该这样做,那么您必须使用TIdCookieManager.OnNewCookie事件在TIdCookie解析cookie后但在TIdCookieManager处理之前更改cookie的过期时间。您可以将TIdCookie.Expires属性设置为未来日期,或设置为0.0以禁用其过期。无论如何,您都必须这样做,因为TIdCookieManager实现了对过期cookies的清理,每当TIdHTTP请求cookies发送HTTP请求时,就会触发该清理,因此,如果您不更改过期日期,那么cookie将在稍后被丢弃。

您可以在尝试添加之前修改cookie过期日期吗?您可以在尝试添加之前修改cookie过期日期吗?感谢您的快速回复!我试图在IdCookieManager1.OnNewCookie事件中拦截cookie,但当cookie到达时,该事件未被激发。IdHTTP1组件指向IdCookieManager1,但不知为什么后者没有被使用?可能正在使用内部cookie管理器?如果事件未触发,则TIdHTTP.AllowCookies属性为false,cookie未被正确解析,或者cookie被拒绝为无效而不是过期。我将在稍后对此进行调查。我可以确认AllowCookies一直都设置为true。因为我对印地是如此的陌生,我可能错过了一些显而易见的东西,但我现在已经花了很多时间在这上面,我很确定我至少涵盖了基本知识。我使用与Delphi XE2 update 4一起发布的版本是否重要?我应该下载开发版本并尝试一下吗?顺便说一句,我非常感谢您的帮助。ThanksIt应该可以很好地与Indy的XE2版本配合使用。你能提供发送cookie的实际URL以便我可以直接查看吗?我不愿意在公共场所发布该链接,但如果你愿意,我可以压缩我的最小项目,说明问题并将其发送给你。拉链是85k。我应该把它寄到哪里?再次感谢您的帮助,感谢您的快速回复!我试图在IdCookieManager1.OnNewCookie事件中拦截cookie,但当cookie到达时,该事件未被激发。IdHTTP1组件指向IdCookieManager1,但不知为什么后者没有被使用?可能正在使用内部cookie管理器?如果事件未触发,则TIdHTTP.AllowCookies属性为false,cookie未被正确解析,或者cookie被拒绝为无效
而不是过期。我将在稍后对此进行调查。我可以确认AllowCookies一直都设置为true。因为我对印地是如此的陌生,我可能错过了一些显而易见的东西,但我现在已经花了很多时间在这上面,我很确定我至少涵盖了基本知识。我使用与Delphi XE2 update 4一起发布的版本是否重要?我应该下载开发版本并尝试一下吗?顺便说一句,我非常感谢您的帮助。ThanksIt应该可以很好地与Indy的XE2版本配合使用。你能提供发送cookie的实际URL以便我可以直接查看吗?我不愿意在公共场所发布该链接,但如果你愿意,我可以压缩我的最小项目,说明问题并将其发送给你。拉链是85k。我应该把它寄到哪里?再次感谢你的帮助。