Qtwebkitをベースにした専用ブラウザを構築しています。認証されたWebサイトにログインするときにセッション情報を保存し、ブラウザーを再起動したときにこの情報を再度ロードしたいと思います。これどうやってするの?
2 に答える
ほとんどの Web サイトは 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 は、URL の一部として、またはページの非表示のフォーム フィールドに保存することもできます。サイトが前者を使用している場合は、URL を保存するだけで十分です。後者を使用している場合は、ページ自体も保存する必要があります。
Web Storageを使用できるようになると、タスクはさらに複雑になります。Web ストレージを使用するサイトの場合、上記のすべてのデータに加えて、Web ストレージの保存と復元に注意する必要があります。を使用してオフライン ストレージの場所を設定し、
それを取得することができますwebkit-qtメーリング リストと freenode.net の #qtwebkit IRC チャネルで
詳細情報を入手できます。
void QWebSettings::setOfflineStoragePath(const QString & path)
QString QWebSettings::offlineStoragePath ()
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);
}