我正在构建一个基于Qtwebkit的专用浏览器。我想在登录经过身份验证的网站时保存会话信息,并在重新启动浏览器时再次加载此信息。我怎么能这样做?
答案 0 :(得分:2)
大多数网站都使用Cookie来存储会话ID。您可以使用
来保存cookie
QList<QNetworkCookie> QNetworkCookieJar::allCookies () const
并使用
加载它们
void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
您可以使用
获得QNetworkCookieJar
QNetworkCookieJar * QNetworkAccessManager::cookieJar () const
并且您可以QNetworkAccessManager
使用
使用QWebPage
QNetworkAccessManager * QWebPage::networkAccessManager () const
会话ID也可以存储为网址的一部分或页面上的隐藏表单字段。如果网站使用前者,则足以保存网址,如果使用后者,则必须自行保存网页。
当Web Storage可以使用时,任务变得更加复杂。如果网站使用网络存储,除了上述所有数据外,您还应该注意保存和恢复它。您可以使用
设置离线存储的位置
void QWebSettings::setOfflineStoragePath(const QString & path)
并使用
获得它
QString QWebSettings::offlineStoragePath ()
您可以在webkit-qt邮件列表和freenode.net上的#qtwebkit IRC频道上获得更多信息
答案 1 :(得分:0)
您可以参考QNetworkCookieJar
虚拟成员函数bool CookieHandler::setCookiesFromUrl (const QList<QNetworkCookie> & cookieList, const QUrl & url)
可用于将cookie保存到您自己的持久存储中。
例如,
bool CookieHandler::setCookiesFromUrl (const QList<QNetworkCookie> & cookieList, const QUrl & url) {
foreach(QNetworkCookie i, cookieList) {
// probably don't want to store session cookies
if (!i.isSessionCookie()) {
// save the cookie to own storage format
}
}
return true;
}
受保护的成员函数void QNetworkCookieJar::setAllCookies ( const QList<QNetworkCookie> & cookieList )
用于将cookie从您自己的存储恢复到QNetworkCookieJar,因为QNetworkCookieJar没有实现永久存储:它只将cookie保留在内存中。
示例代码,
void CookieHandler::setAllCookiestoJar() {
// retrieve cookies from local database
QList<QNetworkCookie> cookieList = this->getCookiesFromLocalDB();
this->setAllCookies(cookieList);
// check if they are correctly loaded
QList<QNetworkCookie> cookieList_tmp = this->allCookies();
foreach(QNetworkCookie i, cookieList_tmp)
qDebug() << i.toRawForm(QNetworkCookie::Full);
}