Save Cookies inside TIDCookieManager to file

我与影子孤独终老i 提交于 2019-12-23 11:57:35

问题


How can I save cookies inside TIdCookieManager to a file so that they can be used later? Like browser cookies.


回答1:


TIdCookieManager does not have any native support for persisting cookie data in files. You have to implement that manually. Use the TIdCookieManager.CookieCollection property to access the list of cookie objects. For example:

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
  ..., IdCookie, 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;

Alternatively:

uses
  ..., IdCookie, 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
  ..., IdCookie, 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;


来源:https://stackoverflow.com/questions/14382732/save-cookies-inside-tidcookiemanager-to-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!