我可以使用QNetworkCookieJar检索,存储和重新发送QNetworkManager的cookie。多个QNetworkAccessManager实例可以共享一个QNetworkCookieJar

到目前为止,我已经使用了多个QNetworkAccessManager实例,每个类一个(需要在其中读取):


所以我可以在1..n QNetworkCookieJar实例之间共享一个单例QNetworkAccessManager
或者只在一个QNetworkAccessManager中共享一个,而在所有QNetworkRequest中共享一个Jar。 QNetworkAccessManager作为单个对象是否可行?文档说应该只有一个实例。所以我最好使用单例QNetworkAccessManager吗?


什么是最合适的方式?

------编辑-------

据我所知,kkoehne's answer是正确的。这也是文档所说的。但是,在尝试这种方法时,我注意到了两个问题:


虽然现在每个Web服务只有一个QNetworkAccessManager,但是更改为一个实例意味着我需要始终区分我刚刚从“完成”槽(从QNetworkAccessManager::finished调用的槽)中收到的内容。这是可行的,但不方便。
我们以不同的方式来运作读者-不幸的是,我忘记在问题中提及这一点。这使得几乎不可能使用QNetworkAccessManager的单个实例,因为成员函数是reentrant,但不是线程安全的。 (QNetworkAccessManager from ThreadPool




相关:QNetworkAccessManager get/post from different thread possible?

最佳答案

我假设您是指QNetworkAccessManager,而不是QNetworkManager

您应该更喜欢在应用程序中使用一个QNetworkAccessManager。这不仅消除了同步QNetworkCookieJar的任何需求,而且还确保了网络的最佳利用,并且共享了缓存的内容等。

如您所知,QtNetworkAccessManager documentation中也暗示了这一点:


  一个QNetworkAccessManager应该足以容纳整个Qt
  应用。

关于c++ - 在Qt应用程序中共享Cookie的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33466168/

10-09 10:05