如何在QML中使用QWebview设置cookie?

时间:2012-02-17 22:31:28

标签: qml qwebview

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

提前感谢。

1 个答案:

答案 0 :(得分:3)

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

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

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

  1. 创建QNetworkCookieJar的实例,可能是子类化 它使它持久化
  2. 将这个饼干罐附加到每个新的 创建了QWebPage
  3. 保存到设置的持久性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