2010-08-01 4 views
2

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

ответ

2

Большинство веб-сайтов используют файлы cookie для хранения идентификатора сеанса. Вы можете сохранить куки с помощью
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

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

}

Смежные вопросы