2010-08-01 45 views

回答

2

大多数网站使用cookie来存储会话ID。您可以使用
QList<QNetworkCookie> QNetworkCookieJar::allCookies() const
cookie保存和使用
void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
加载他们回来可以使用
QNetworkCookieJar * QNetworkAccessManager::cookieJar() const
得到QNetworkCookieJar,你可以得到QNetworkAccessManager通过QWebPage使用
QNetworkAccessManager * QWebPage::networkAccessManager() const

会话ID使用可也可以作为url的一部分存储或者存储在页面的隐藏表单域中。如果网站使用前者,则足以保存网址,如果使用后者,则也必须保存网页本身。

现在当任务变得更加复杂时,可以使用Web Storage。如果网站使用网络存储,则除了上述所有数据之外,还应注意保存和恢复网站。您可以使用
void QWebSettings::setOfflineStoragePath(const QString & path)
设置为离线存储它的位置和使用
QString QWebSettings::offlineStoragePath()
得到你可能会得到webkit-qt邮件列表和关于freenode.net #qtwebkit IRC频道一些更多的信息

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)用来从自己的存储到QNetworkCookieJar恢复饼干,因为QNetworkCookieJar没有实现永久存储:只保持饼干在内存中。 示例代码,

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); 

}

相关问题