How do I save cookies with Qt?

前端 未结 3 796
臣服心动
臣服心动 2021-01-01 05:20

I am trying to save cookies that are produced by my app to disk location such as C:\\Users\\Username\\AppData\\Local\\MyCompany\\MyApp. I have implemented a web

3条回答
  •  暖寄归人
    2021-01-01 05:52

    @Musa's answer is good but it only saves one cookie. I recommend using the Qt folk's implementation from the old qmlviewer located here: http://code.qt.io/cgit/qt/qt.git/tree/tools/qml/qmlruntime.cpp?h=4.7#n438

    Here's the code:

    class PersistentCookieJar : public QNetworkCookieJar {
    public:
        PersistentCookieJar(QObject *parent) : QNetworkCookieJar(parent) { load(); }
        ~PersistentCookieJar() { save(); }
    
        virtual QList cookiesForUrl(const QUrl &url) const
        {
            QMutexLocker lock(&mutex);
            return QNetworkCookieJar::cookiesForUrl(url);
        }
    
        virtual bool setCookiesFromUrl(const QList &cookieList, const QUrl &url)
        {
            QMutexLocker lock(&mutex);
            return QNetworkCookieJar::setCookiesFromUrl(cookieList, url);
        }
    
    private:
        void save()
        {
            QMutexLocker lock(&mutex);
            QList 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()
        {
            QMutexLocker lock(&mutex);
            QSettings settings;
            QByteArray data = settings.value("Cookies").toByteArray();
            setAllCookies(QNetworkCookie::parseCookies(data));
        }
    
        mutable QMutex mutex;
    };
    

提交回复
热议问题