如何将会话信息加载到 qtwebkit 中?
Posted
技术标签:
【中文标题】如何将会话信息加载到 qtwebkit 中?【英文标题】:How can I load session information into qtwebkit? 【发布时间】:2010-08-01 15:53:31 【问题描述】:我正在构建一个基于 Qtwebkit 的专用浏览器。我想在登录经过身份验证的网站时保存会话信息,并在重新启动浏览器时再次加载此信息。我该怎么做?
【问题讨论】:
【参考方案1】:大多数网站都使用 cookie 来存储会话 ID。您可以使用QList<QNetworkCookie> QNetworkCookieJar::allCookies () const
保存 cookie
并使用void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
加载它们
您可以使用QNetworkCookieJar * QNetworkAccessManager::cookieJar () const
获取QNetworkCookieJar
你可以得到QNetworkAccessManager
被QWebPage
使用QNetworkAccessManager * QWebPage::networkAccessManager () const
会话 id 也可以存储为 url 的一部分或页面上的隐藏表单字段。如果网站使用前者,保存 url 就足够了,如果使用后者,你也必须保存页面本身。
当Web Storage 可以使用时,任务变得更加复杂。如果网站使用网络存储,除了上述所有数据之外,您还应该注意保存和恢复它。您可以使用void QWebSettings::setOfflineStoragePath(const QString & path)
设置离线存储的位置
并使用QString QWebSettings::offlineStoragePath ()
获取它
您可能会在webkit-qt 邮件列表和 freenode.net 上的#qtwebkit IRC 频道上获得更多信息
【讨论】:
【参考方案2】:可以参考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);
【讨论】:
以上是关于如何将会话信息加载到 qtwebkit 中?的主要内容,如果未能解决你的问题,请参考以下文章
PyQt4.QtWebKit:加载停止时 QWebPage QWebView 设置超时