2010-08-01 42 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); 

}

相關問題