2

我在 QML 中使用 QWebView。我想显示需要身份验证的网站。数据应通过标准 cookie 传递。有什么帮助吗?附加链接或示例会很棒。

预先感谢。

4

1 回答 1

4

默认情况下,webkit 使用的默认 QNetworkAccessManager 有自己的(非持久性)cookie jar,也就是 QNetworkCookieJar。

这将在 QWebPage 的生命周期内处理 cookie 的发送和接收。

要在多个页面中保留相同的 cookie jar,您必须:

  1. 创建一个 QNetworkCookieJar 的实例,可能对其进行子类化以使其持久化
  2. 将此 cookie jar 附加到每个新创建的 QWebPage

保存到设置的持久 cookie jar 示例:

class PersistentCookieJar : public QNetworkCookieJar {
public:
    PersistentCookieJar(QObject *parent) : QNetworkCookieJar(parent) { load(); }
    ~PersistentCookieJar() { save(); }

public:
    void save()
    {
        QList<QNetworkCookie> list = allCookies();
        QByteArray data;
        foreach (QNetworkCookie cookie, list) {
            if (!cookie.isSessionCookie()) {
                data.append(cookie.toRawForm());
                data.append("\n");
            }
        }
        QSettings settings;
        settings.setValue("Cookies",data);
    }

    void load()
    {
        QSettings settings;
        QByteArray data = settings.value("Cookies").toByteArray();
        setAllCookies(QNetworkCookie::parseCookies(data));
    }
};

要使用:

QWebView* vw = new QWebView(this);
PersistenCookieJar* jar = new PersistenCookieJar(this);
vw->page()->networkAccessManager()->setCookieJar(jar);  // the jar is reparented to the page
jar->setParent(this);  // reparent to main widget to avoid destruction together with the page
于 2012-02-18T15:15:28.250 回答