2012-02-17 9 views
1

私はQMLでQWebViewを使用しています。私は認証が必要なウェブサイトを見せたい。データは標準クッキーで渡す必要があります。 助けてください?追加のリンクや例が素晴らしいでしょう。QWebviewでクッキーを設定するには?

ありがとうございます。

答えて

3

デフォルトでは、Webkitで使用されるデフォルトのQNetworkAccessManagerには、独自の(非永続的な)Cookie jar(別名QNetworkCookieJar)があります。

これは、QWebPageの寿命中のCookieの送受信を処理します。

あなたがする必要があり、複数のページにわたって同じクッキージャーを保つために:

  1. は、おそらくそれは
  2. 永続各新しく にこのクッキージャーを添付するために それをサブクラス化、QNetworkCookieJarのインスタンスを作成します。設定に保存された永続的なクッキージャーの作成QWebPage

例:

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 
+0

@shahinulを - あなたは答えを受け入れる必要があります。 –

+0

ヒント:上記のコードが機能しない場合は、それを拡張して、cookiesForUrl(QUrl *)メソッドをオーバーライドすることができます。ベースクラスのメソッドのクッキーをそこに集め、あなたの永続的なクッキーを追加し、それらのすべてを返します。この方法で、あなたのクッキーはブラウザで開いたURLに渡されます。 – Fabian

関連する問題