Je construis un navigateur spécialisé basé sur Qtwebkit. Je souhaite enregistrer les informations de session lors de la connexion à des sites Web authentifiés et charger à nouveau ces informations lorsque je redémarre le navigateur. Comment puis-je faire ceci?Comment charger des informations de session dans qtwebkit?
Répondre
La plupart des sites utilisent des cookies pour stocker l'identifiant de session. Vous pouvez enregistrer les cookies à l'aide
QList<QNetworkCookie> QNetworkCookieJar::allCookies() const
et de les charger en arrière en utilisant
void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
Vous pouvez obtenir QNetworkCookieJar
en utilisant
QNetworkCookieJar * QNetworkAccessManager::cookieJar() const
et vous pouvez vous QNetworkAccessManager
utilisé par QWebPage
en utilisant
QNetworkAccessManager * QWebPage::networkAccessManager() const
id session peut être également stocké dans le cadre de l'URL ou dans le champ de formulaire caché sur la page. Si le site utilise le premier, il suffit de sauvegarder l'URL et s'il utilise ce dernier, vous devez également enregistrer la page.
La tâche devient plus compliquée maintenant, quand le Web Storage pourrait être utilisé. Si un site utilise le stockage Web, vous devez prendre soin de l'enregistrer et de le restaurer en plus de toutes les données ci-dessus. Vous pouvez définir l'emplacement pour le stockage hors ligne à l'aide
void QWebSettings::setOfflineStoragePath(const QString & path)
et obtenir l'aide
QString QWebSettings::offlineStoragePath()
Vous pouvez obtenir des informations supplémentaires sur webkit-qt liste de diffusion et sur le canal IRC#qtwebkit sur freenode.net
Vous pouvez consulter à QNetworkCookieJar la fonction membre virtuel bool CookieHandler::setCookiesFromUrl (const QList<QNetworkCookie> & cookieList, const QUrl & url)
peut être utilisée pour enregistrer les cookies dans votre propre stockage persistant. Par exemple,
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;
}
fonction membre protégé void QNetworkCookieJar::setAllCookies (const QList<QNetworkCookie> & cookieList)
est utilisé pour restaurer les cookies de votre propre espace de stockage à QNetworkCookieJar depuis QNetworkCookieJar ne met pas en œuvre le stockage permanent: il ne conserve que les cookies dans la mémoire. exemple de code,
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);
}