TNetHTTPClient清除cookies

TNetHTTPClient清除cookies,http,delphi,cookies,firemonkey,Http,Delphi,Cookies,Firemonkey,我正在Delphi 10.2.3 Firemonkey项目中使用TNetHTTPClient,希望清除所有存储的cookie。我在帮助文件中没有找到任何解决方案。我尝试了此代码,但得到的错误是数组是只读的: SetLength(NetHTTPClient1.CookieManager.Cookies, 0); 在不破坏TNetHTTPClient实例并再次创建它的情况下,如何清除所有Cookie?只是一个想法: for i := 0 to High(NetHTTPClient1.CookieM

我正在Delphi 10.2.3 Firemonkey项目中使用TNetHTTPClient,希望清除所有存储的cookie。我在帮助文件中没有找到任何解决方案。我尝试了此代码,但得到的错误是数组是只读的:

SetLength(NetHTTPClient1.CookieManager.Cookies, 0);
在不破坏TNetHTTPClient实例并再次创建它的情况下,如何清除所有Cookie?

只是一个想法:

for i := 0 to High(NetHTTPClient1.CookieManager.Cookies)
  do NetHTTPClient1.CookieManager.Cookies[i].Expires := Now - 1;

NetHTTPClient1.CookieManager.dCookies;
这样,您可以将所有cookie设置为过期。 再次获取cookie调用内部调用的
GetCookies
,该调用
DeleteExpiredCookies

编辑


不幸的是,这不起作用(请阅读下面的评论了解详细信息)

多亏了Bigfoord和Toon Krijthe关于班级帮手的介绍,我才明白了这一点

由于
CookieManager.Cookies
是只读的,我试图通过类助手访问私有字段
TCookies
,该类助手自10.1版本起不再工作。然而,Toon Krijthe找到了一种方法,我根据自己的需要对其进行了调整:

接口:

type
  TCookieManagerHelper = class helper for TCookieManager
    procedure DeleteCookies;
  end;
实施:

procedure TCookieManagerHelper.DeleteCookies;
begin
  with self do
    FCookies.clear;
end;
每当我想清除Cookie时:

NetHTTPClient1.CookieManager.DeleteCookies;

我必须补充一点,这可能不适用于未来版本的Delphi,因为Embarcadero故意禁止通过类助手访问私有字段。

我非常喜欢你的想法。不幸的是,属性“Cookies”是只读的:属性Cookies:TCookiesArray read-GetCookies;嗨@Flo没关系,过期的cookie在属性读取时被清除!嗨,大麻烦,你的说法绝对正确。但是由于整个cookie数组是只读的,因此我无法修改
Expires
属性。你的代码对你有用吗?嗨@Flo,
Cookies
数组是只读的(你不能分配给它),但是它的元素(
TCookie
记录)不是,你可以修改单个cookie属性
Expires
,没有任何问题(我在Delphi 10.2.2下,还没有更新到10.2.3)我只是再试一次,我无法更改记录的任何值。它们保留了它们的原始价值。