2

Qtwebkitをベースにした専用ブラウザを構築しています。認証されたWebサイトにログインするときにセッション情報を保存し、ブラウザーを再起動したときにこの情報を再度ロードしたいと思います。これどうやってするの?

4

2 に答える 2

2

ほとんどの Web サイトは Cookie を使用してセッション ID を保存します。を使用して Cookie を保存し、 を使用して 再度読み込む ことができ ます。
QList<QNetworkCookie> QNetworkCookieJar::allCookies () const

void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
QNetworkCookieJar
QNetworkCookieJar * QNetworkAccessManager::cookieJar () const
QNetworkAccessManagerQWebPage
QNetworkAccessManager * QWebPage::networkAccessManager () const

セッション ID は、URL の一部として、またはページの非表示のフォーム フィールドに保存することもできます。サイトが前者を使用している場合は、URL を保存するだけで十分です。後者を使用している場合は、ページ自体も保存する必要があります。

Web Storageを使用できるようになると、タスクはさらに複雑になります。Web ストレージを使用するサイトの場合、上記のすべてのデータに加えて、Web ストレージの保存と復元に注意する必要があります。を使用してオフライン ストレージの場所を設定し、 それを取得することができますwebkit-qtメーリング リストと freenode.net の #qtwebkit IRC チャネルで 詳細情報を入手できます。
void QWebSettings::setOfflineStoragePath(const QString & path)

QString QWebSettings::offlineStoragePath ()

于 2010-12-18T13:20:30.487 に答える
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;

}

QNetworkCookieJar は永続的なストレージを実装していないため、保護されたメンバー関数void QNetworkCookieJar::setAllCookies ( const QList<QNetworkCookie> & cookieList )を使用して、Cookie を独自のストレージから 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);

}

于 2012-02-08T12:24:37.877 に答える