如何将TIdCookieManager中的cookie保存到文件中以便以后使用?喜欢浏览器cookie.
解决方法
TIdCookieManager对于在文件中保留cookie数据没有任何本机支持.你必须手动实现它.使用TIdCookieManager.CookieCollection属性可以访问cookie对象列表.例如:
uses ...,IdCookie,IdCookieManager; var Cookies: TIdCookieList; Cookie: TIdCookie; I: Integer; begin Cookies := IdCookieManager.CookieCollection.LockCookieList(caRead); try for I := 0 to Cookies.Count-1 do begin Cookie := Cookies[I]; // save Cookie properties as needed... end; finally IdCookieManager.CookieCollection.UnlockCookieList(caRead); end; end;
.
uses ...,IdCookieManager; var Cookies: TIdCookies; Cookie: TIdCookie; begin Cookies := IdCookieManager.CookieCollection.LockCookieList(caReadWrite); try for (each saved cookie) do begin Cookie := IdCookieManager.CookieCollection.Add; try // read Cookie properties as needed... Cookies.Add(Cookie); except Cookie.Free; raise; end; end; finally IdCookieManager.CookieCollection.UnlockCookieList(caReadWrite); end; end;
或者:
uses ...,IdCookieManager; var Cookies: TIdCookieList; Cookie: TIdCookie; I: Integer; S: string; begin Cookies := IdCookieManager.CookieCollection.LockCookieList(caRead); try for I := 0 to Cookies.Count-1 do begin Cookie := Cookies[I]; S := Cookie.ServerCookie; // save S as needed... end; finally IdCookieManager.CookieCollection.UnlockCookieList(caRead); end; end;
.
uses ...,IdCookieManager,IdURI; var S: string; Cookies: TIdCookies; Cookie: TIdCookie; Uri: TIdURI; begin Cookies := IdCookieManager.CookieCollection.LockCookieList(caReadWrite); try for (each saved cookie) do begin // read S as needed S := ...; Uri := TIdURI.Create(URL where cookie came from); try Cookie := IdCookieManager.CookieCollection.Add; try Cookie.ParseServerCookie(S,Uri); Cookies.Add(Cookie); except Cookie.Free; raise; end; finally Uri.Free; end; finally IdCookieManager.CookieCollection.UnlockCookieList(caReadWrite); end; end;