如何使用Qt保存cookie?

Kal*_*Kal 4 c++ cookies qt qnetworkaccessmanager

我正在尝试将我的应用程序生成的cookie保存到磁盘位置,例如C:\Users\Username\AppData\Local\MyCompany\MyApp.我已经实现了一个webview并且已经完成了对我的简单浏览器的编码,最后要做的就是保存cookie.

我可以qDebug()我从webapp获得的cookie,他们显示cookie是正确形成但我是a)不确定从那里去哪里和b)不是100%确定如何创建cookiejar类的子类?

下面我在MainWindow构造函数中创建我的cookiejar对象

view = new QWebView(this);
jar = new QNetworkCookieJar;
view->page()->networkAccessManager()->setCookieJar(jar);
Run Code Online (Sandbox Code Playgroud)

在我的回复槽中,我可以看到回复中包含的cookie,我试图保存它,但没有任何反应,我没有收到运行时错误.在这方面没有太多的东西,并且已经看到一些帖子,其中的指令是创建子类QNetworkCookieJar,但之前没有在Qt/C++中创建子类.

有没有一种简单的方法来存储cookie,我不是在寻找任何花哨的东西.Cookie只是确保在登录页面上勾选了一些复选框.

// SLOT that accepts the read data from the webpage
void MainWindow::slotReplyFinished(QNetworkReply *reply){

    if(reply->isFinished()){
        QVariant variantCookies = reply->header(QNetworkRequest::SetCookieHeader);
        QList<QNetworkCookie> cookies = qvariant_cast<QList<QNetworkCookie> >(variantCookies);
        qDebug() << "Cookies reply: " << cookies;
        QNetworkCookie cookie; //Create a cookie



        jar = new QNetworkCookieJar;
        //view->page()->networkAccessManager()->setCookieJar(jar);
        jar->setCookiesFromUrl(cookies, reply->request().url());
        //qDebug() << "Saved cookies: " << jar->getAllCookies();
    }

    qDebug() << "Network reply: " << reply->errorString() << reply->error() << reply->request().url();
 }
Run Code Online (Sandbox Code Playgroud)

Ahm*_*taq 6

您将需要子类化QNetworkCookieJar,并且在该类中您应该实现自己的持久存储.

class MyNetworkCookieJar : public QNetworkCookieJar {

public: 

bool saveCookiesToDisk() {
// .. my implementation
return true; // if i did
}

bool loadCookiesFromDisk() {
// .. load from disk
return false; // if unable to.
}
}
Run Code Online (Sandbox Code Playgroud)

Qt项目中的示例应用程序实现了一个持久的cookie存储,它可能是一个很好的起点:http://qt.gitorious.org/qt/qt/trees/4.8/demos/browser

看看cookiejar.h和cookiejar.cpp