【问题标题】:How can I load session information into qtwebkit?如何将会话信息加载到 qtwebkit 中?
【发布时间】:2010-08-01 15:53:31
【问题描述】:

我正在构建一个基于 Qtwebkit 的专用浏览器。我想在登录经过身份验证的网站时保存会话信息,并在重新启动浏览器时再次加载此信息。我该怎么做?

【问题讨论】:

    标签: qt4 pyqt4 qtwebkit


    【解决方案1】:

    大多数网站都使用 cookie 来存储会话 ID。您可以使用
    QList<QNetworkCookie> QNetworkCookieJar::allCookies () const
    保存 cookie 并使用
    void QNetworkCookieJar::setAllCookies(const QList<QNetworkCookie> & cookieList)
    加载它们 您可以使用
    QNetworkCookieJar * QNetworkAccessManager::cookieJar () const
    获取QNetworkCookieJar 你可以得到QNetworkAccessManagerQWebPage使用
    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&lt;QNetworkCookie&gt; &amp; 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);
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-03
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多