По умолчанию у QNetworkAccessManager по умолчанию, используемого webkit, есть свой собственный (непостоянный) куки-файл cookie, также известный как QNetworkCookieJar.
Это будет обрабатывать отправку и получение файлов cookie в течение срока службы QWebPage.
Чтобы сохранить те же кук на несколько страниц, вы должны:
- Создать экземпляр 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
@shahinul - вы должны принять ответ. –
Подсказка: если вы не указали приведенный выше код, вы можете расширить его и переопределить виртуальный метод cookiesForUrl (QUrl *). Соберите куки метода базового класса там, добавьте свои постоянные и верните все из них. Таким образом, ваш файл cookie будет передан любому URL-адресу, открытому в браузере. – Fabian