我在Delphi 10.2.3 Firemonkey项目中使用TNetHTTPClient,并希望清除所有存储的cookie。我在帮助文件中找不到任何解决方案。我尝试了这段代码,但是我得到了数组只读的错误:
SetLength(NetHTTPClient1.CookieManager.Cookies, 0);
如何在不破坏TNetHTTPClient实例并再次创建的情况下清除所有cookie?
答案 0 :(得分:1)
只是一个想法:
for i := 0 to High(NetHTTPClient1.CookieManager.Cookies)
do NetHTTPClient1.CookieManager.Cookies[i].Expires := Now - 1;
NetHTTPClient1.CookieManager.dCookies;
这样您就可以将所有Cookie设置为已过期。
再次获取Cookie会调用内部调用GetCookies
DeleteExpiredCookies
修改强>
不幸的是,这不起作用(详见下面的评论)
答案 1 :(得分:0)
我想通了,非常感谢BigBother和Toon Krijthe在another thread关于班级助手的问题!
由于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;
每当我想清除cookies时:
NetHTTPClient1.CookieManager.DeleteCookies;
我必须补充一点,这可能不适用于Delphi的未来版本,因为Embarcadero故意禁止通过类帮助程序访问私有字段。