Frage

Ich verwende QWebView in QML.Ich möchte eine Website anzeigen, die authentifiziert werden muss.Daten sollten über Standard-Cookie übergeben werden. Irgendeine Hilfe?Zusätzlicher Link oder Beispiel wäre toll.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Standardmäßig verfügt der vom Webkit verwendete Standard-QNetworkAccessManager über eine eigene (nicht persistente) Cookie-JAR, auch bekannt als QNetworkCookieJar.

Hiermit wird das Senden und Empfangen von Cookies während der Lebensdauer einer QWebPage behandelt.

Um dasselbe Cookie-Glas auf mehreren Seiten zu behalten, müssen Sie:

  1. Erstellen Sie eine Instanz eines QNetworkCookieJar, möglicherweise eine Unterklasse es, um es dauerhaft zu machen
  2. Bringen Sie diese Keksdose jeweils neu an QWebPage erstellt

    Beispiel für ein dauerhaftes Cookie-Glas, das in den Einstellungen gespeichert wurde:

    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));
        }
    };
    

    So verwenden Sie:

    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
    

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top