TNetHTTPClient清除cookies
我正在Delphi 10.2.3 Firemonkey项目中使用TNetHTTPClient,希望清除所有存储的cookie。我在帮助文件中没有找到任何解决方案。我尝试了此代码,但得到的错误是数组是只读的: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
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)我只是再试一次,我无法更改记录的任何值。它们保留了它们的原始价值。