如何将会话信息加载到qtwebkit中?

时间:2010-08-01 15:53:32

标签: qt4 pyqt4 qtwebkit

我正在构建一个基于Qtwebkit的专用浏览器。我想在登录经过身份验证的网站时保存会话信息,并在重新启动浏览器时再次加载此信息。我怎么能这样做?

2 个答案:

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

}