【问题标题】:How to copy cookies in Indy 10如何在 Indy 10 中复制 cookie
【发布时间】:2020-01-19 02:23:27
【问题描述】:

我在 Delphi 7 中使用 Indy 10。 我在主窗体中有一个 TidCookieManager,我希望将它的 cookie 复制到另一个线程中的另一个 cookie 管理器,这个线程显然可以访问主窗体。

如何复制这些 cookie?

谢谢,

大卫

【问题讨论】:

  • 首先看一下 TIdCookieManager 的 CookieCollection 和 CopyCookie()。在同步块中运行代码。查看Save Cookies inside TIDCookieManager to file 的答案,获取有关通过 cookie 进行交互的帮助。
  • "在同步块中运行代码" - 这是不必要的,因为 CookieCollection 使用线程锁(特别是 TMultiReadExclusiveWriteSynchronizer)。在迭代+复制时锁定源和目标CookieCollections 将提供足够的同步。此外,您无需手动迭代+复制各个 cookie,因为 CookieCollection 具有 Assign()AddCookies() 方法来为您处理该操作。

标签: delphi indy cookiemanager


【解决方案1】:

TIdCookieManager 有一个 CookieCollection 类型的公共属性 TIdCookies,它提供对实际 cookie 的访问。一个TIdCookies 的cookie 可以通过Assign()AddCookies() 方法直接复制到另一个TIdCookies,例如:

// clears the dest collection before then copying cookies to it...
CookieMgrInWorkerThread.CookieCollection.Assign(CookieMgrInMainThread.CookieCollection);
// does not clear the dest collection before copying cookies to it...
CookieMgrInWorkerThread.CookieCollection.AddCookies(CookieMgrInMainThread.CookieCollection);

无论哪种方式,TIdCookies 都是线程安全的,因为它在读/写操作期间使用内部 TMultiReadExclusiveWriteSynchronizer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多