c++ - 具有多个框架/页面的 QWebView 共享相同的 session 数据

标签 c++ qt4 qtwebkit

我有一个 QWebView,它会加载某个页面,用户登录并处理他的业务。这一切都很好。

我想做的是打开第二个框架/pae,它使用登录的用户 session 和所有爵士乐来加载报告页面,它将呈现为图像文件以显示在一个小 USB 屏幕上。

现在,我使用完全不同的 webView 来完成此操作,它无法访问 protected 页面,这存在一点安全风险。

下面是我所想的一些伪代码:

webView->mainFrame->loadNormalUrl
secretFrame = webView->createSecretFrame
secretFrame->useSessionOf(webView->mainFrame)
secretFrame->loadReportUrl
secretFrame->doStuffThatAlreadyWorks

任何帮助、指针、链接都会非常有帮助!谢谢:)

最佳答案

嗯,

这个问题没有收到和回答,所以我去了 qtwebkit 邮件列表,他们非常有帮助。

最重要的是对 QNetworkCookieJar 进行子类化,最重要的方法是从磁盘加载,您可以在构造函数中调用它。

QList<QNetworkCookie> cookies;
if (m_file.open(QIODevice::ReadOnly | QIODevice::Text)) {
    QTextStream in(&m_file);
    QString txt = in.readAll();
    QStringList lines = txt.split("\n");
   foreach (QString c, lines) {
    cookies.append(QNetworkCookie::parseCookies(c.toUtf8()));
   }
    m_file.close();
} 
setAllCookies(cookies);

当然,你还需要一个写函数,像这样:

QTextStream out(&m_file);
        foreach (const QByteArray &cookie, m_rawCookies)
            out << cookie + "\n";
        m_file.close();

你的原始 cookies 是这样的:

QList<QNetworkCookie> cookies = allCookies();
m_rawCookies.clear();

foreach (const QNetworkCookie &cookie, cookies) {
  m_rawCookies.append(cookie.toRawForm());
}

如果您下载了 webkit 源代码,您可以查看 testbrowser 代码以获得更完整的示例。

关于c++ - 具有多个框架/页面的 QWebView 共享相同的 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8942531/

相关文章:

c++ - 如何在启动 C++ 应用程序时检查 mongodb 是否正在运行

c++ - 如何使用 eigen 和 boost 库运行矩阵乘法?

c++ - Qt:将数据库存储/创建到用户空间

c++ - 从大 vector 中删除第一个元素的最有效方法是什么?

qt - 在 Qt 中将小部件保持在顶部

qt - 如何在 QWizard 中完全禁用或隐藏后退按钮?

javascript - JavaScript 中的屏幕对象在 QWebEnginePage 中不可用

c++ - 未解析的外部符号。 C++

c++ - 使用 CMake 和 AUTORCC 的 Qt 资源文件

qt4 - page-break-inside 在具有 rowSpan 的表格单元格中不起作用?