Как я могу загрузить информацию о сеансе в qtwebkit? - PullRequest
2 голосов
/ 01 августа 2010

Я строю специализированный браузер на основе Qtwebkit.Я хотел бы сохранить информацию о сеансе при входе на аутентифицированные веб-сайты и снова загрузить эту информацию при перезапуске браузера.Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 18 декабря 2010

Большинство сайтов используют куки для хранения идентификатора сессии.Вы можете сохранять куки, используя
QList<QNetworkCookie> QNetworkCookieJar::allCookies () const
и загружать их обратно, используя
void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
. Вы можете получить QNetworkCookieJar, используя
QNetworkCookieJar * QNetworkAccessManager::cookieJar () const
и вы можете получить QNetworkAccessManager используемый QWebPage с использованием
QNetworkAccessManager * QWebPage::networkAccessManager () const

Идентификатор сеанса также может быть сохраненкак часть URL или в скрытом поле формы на странице.Если сайт использует первый, достаточно сохранить URL-адрес, а если он использует второй, вам также необходимо сохранить саму страницу.

Задача усложняется теперь, когда Web Storage может быть использован.Если сайт использует веб-хранилище, вы должны позаботиться о его сохранении и восстановлении в дополнение ко всем вышеперечисленным данным.Вы можете установить местоположение для автономного хранения с помощью
void QWebSettings::setOfflineStoragePath(const QString & path)
и получить его с помощью
QString QWebSettings::offlineStoragePath ()
Вы можете получить более подробную информацию о webkit-qt список рассылки и на IRC-канале #qtwebkit на freenode.net

0 голосов
/ 08 февраля 2012

Вы можете обратиться к 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);

}

...