QNetworkCookieJar Class
QNetworkCookieJar 类实现了QNetworkCookie 对象的简单 jar。更多
Header: | #include <QNetworkCookieJar> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
qmake: | QT += network |
继承: | QObject |
公共函数
QNetworkCookieJar(QObject *parent = nullptr) | |
virtual | ~QNetworkCookieJar() |
virtual QList<QNetworkCookie> | cookiesForUrl(const QUrl &url) const |
virtual bool | deleteCookie(const QNetworkCookie &cookie) |
virtual bool | insertCookie(const QNetworkCookie &cookie) |
virtual bool | setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url) |
virtual bool | updateCookie(const QNetworkCookie &cookie) |
保护函数
QList<QNetworkCookie> | allCookies() const |
void | setAllCookies(const QList<QNetworkCookie> &cookieList) |
virtual bool | validateCookie(const QNetworkCookie &cookie, const QUrl &url) const |
详细说明
Cookie 是 HTTP 等无状态协议用来跨请求维护某些持久信息的小段信息。
远程服务器在回复请求时会设置 Cookie,并希望在发送其他请求时也能发回相同的 Cookie。
Cookie jar 是一个对象,它保存着之前请求中设置的所有 cookie。网络浏览器会将它们的 cookie jar 保存到磁盘中,以便在调用应用程序时保存永久 cookie。
QNetworkCookieJar 并不实现永久存储:它只将 cookie 保存在内存中。一旦删除 QNetworkCookieJar 对象,它所保存的所有 cookie 也将被丢弃。如果要保存 Cookie,应从该类派生,并以自己的存储格式实现保存到磁盘的功能。
该类只实现了 cookie 规范推荐的基本安全性,并没有实现任何 cookie 接受策略(它接受任何请求设置的所有 cookie)。为了覆盖这些规则,您应该重新实现cookiesForUrl() 和setCookiesFromUrl() 虚拟函数。QNetworkReply 和QNetworkAccessManager 在检测到新 Cookie 和需要 Cookie 时会调用这两个函数。
另请参阅 QNetworkCookie,QNetworkAccessManager,QNetworkReply,QNetworkRequest 和QNetworkAccessManager::setCookieJar() 。
成员函数文档
[explicit]
QNetworkCookieJar::QNetworkCookieJar(QObject *parent = nullptr)
创建一个 QNetworkCookieJar 对象,并将父对象设置为parent 。
cookie jar 初始化为空。
[virtual noexcept]
QNetworkCookieJar::~QNetworkCookieJar()
销毁 cookie jar 对象并丢弃其中存储的所有 cookie。在QNetworkCookieJar 默认实现中,Cookie 不会保存到磁盘。
如果需要将 cookie 保存到磁盘,则必须从QNetworkCookieJar 派生,并自行将 cookie 保存到磁盘。
[protected]
QList<QNetworkCookie> QNetworkCookieJar::allCookies() const
返回存储在此 cookie jar 中的所有 cookie。该函数适用于将 cookie 保存到磁盘的派生类,也适用于执行 cookie 过期和其他策略。
另请参阅 setAllCookies() 和cookiesForUrl()。
[virtual]
QList<QNetworkCookie> QNetworkCookieJar::cookiesForUrl(const QUrl &url) const
返回向url 发送请求时要添加的 cookie。默认的QNetworkAccessManager::createRequest() 会调用此函数,将此函数返回的 cookie 添加到发送的请求中。
如果找到多个同名但路径不同的 cookie,则先返回路径较长的 cookie,再返回路径较短的 cookie。换句话说,该函数返回的 cookie 按路径长度递减排序。
默认的QNetworkCookieJar 类只实现了非常基本的安全策略(确保 cookie 的域和路径与回复的相匹配)。要使用自己的算法增强安全策略,请覆盖 cookiesForUrl()。
另请参阅 setCookiesFromUrl() 和QNetworkAccessManager::setCookieJar()。
[virtual]
bool QNetworkCookieJar::deleteCookie(const QNetworkCookie &cookie)
从 cookie jar 中删除与cookie 具有相同标识符的 cookie。
如果 cookie 被删除,则返回true
,否则返回 false。
另请参阅 QNetworkCookie::hasSameIdentifier().
[virtual]
bool QNetworkCookieJar::insertCookie(const QNetworkCookie &cookie)
将cookie 添加到此 cookie jar。
如果添加了cookie ,则返回true
,否则返回 false。
如果 cookie jar 中已经存在具有相同标识符的 cookie,它将被覆盖。
[protected]
void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> &cookieList)
将此 cookie jar 保存的 cookie 内部列表设置为cookieList 。该函数适合派生类通过重新实现setCookiesFromUrl() 来实现从永久存储中加载 cookie 或自己的 cookie 接受策略。
另请参阅 allCookies() 和setCookiesFromUrl()。
[virtual]
bool QNetworkCookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url)
将cookieList 列表中的 cookie 添加到此 cookie 罐中。在插入之前,cookie 会被规范化。
如果为url 设置了一个或多个 cookie,则返回true
,否则返回 false。
如果 cookie jar 中已经存在 cookie,它将被cookieList 中的 cookie 覆盖。
默认的QNetworkCookieJar 类只实现了非常基本的安全策略(确保 cookie 的域和路径与回复的相匹配)。要使用自己的算法增强安全策略,请重载 setCookiesFromUrl()。
此外,QNetworkCookieJar 没有规定 cookie 罐的最大容量。重新执行此函数可丢弃旧 cookie,为新 cookie 留出空间。
另请参阅 cookiesForUrl()、QNetworkAccessManager::setCookieJar() 和QNetworkCookie::normalize()。
[virtual]
bool QNetworkCookieJar::updateCookie(const QNetworkCookie &cookie)
如果此 cookie 中存在与cookie 相同标识符的 cookie,则该 cookie 将被更新。此函数使用insertCookie() 。
如果cookie 已更新,则返回true
;如果罐中没有与cookie 的标识符匹配的 cookie,则返回 false。
另请参见 QNetworkCookie::hasSameIdentifier()。
[virtual protected]
bool QNetworkCookieJar::validateCookie(const QNetworkCookie &cookie, const QUrl &url) const
如果cookie 的域和路径有效,则返回true
,否则返回 false。url 参数用于确定是否允许使用 cookie 中指定的域。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.