Qt中QWebEngineView控件Cookie及缓存的常见问题

一、QWebEngineView获取Cookie及缓存文件的默认存储路径

通过QWebEngineView实现基本的浏览网页界面程序,运行后QtWebEngine会在用户目录AppData\Local下生成缓存文件夹,该文件夹是隐藏的,需要设置文件夹隐藏可见才能具体看到。示例如下:

C:\Users\Administrator\AppData\Local\AppName\QtWebEngine\Default

其中,AppName是应用程序的名称,文件夹中包含了缓存文件,同时也包含了cookies信息,cookies保存在QtWebEngine\Default文件夹中。

Qt中QWebEngineView控件Cookie及缓存的常见问题

二、QWebEngineView删除Cookie及缓存文件

//删除缓存Cookie
void WebViewHelper::clearCookie()
{
    QWebEngineProfile * engineProfile = _webView->page()->profile();
    engineProfile->clearHttpCache();        // 清理缓存
    engineProfile->clearAllVisitedLinks();  // 清理浏览记录
    QWebEngineCookieStore* pCookie = _webView->page()->profile()->cookieStore();
    pCookie->deleteAllCookies();            // 清理cookie
    pCookie->deleteSessionCookies();        // 清理会话cookie
    //this->deleteDir(engineProfile->persistentStoragePath());//删除会话和持久性Cookie文件夹
}

//删除文件夹
bool WebViewHelper::deleteDir(const QString &path)
{
    if (path.isEmpty()){
        return false;
    }
    QDir dir(path);
    if(!dir.exists()){
        return true;
    }
    dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); //设置过滤
    QFileInfoList fileList = dir.entryInfoList(); // 获取所有的文件信息
    foreach (QFileInfo file, fileList){ //遍历文件信息
        if (file.isFile()){ // 是文件,删除
            file.dir().remove(file.fileName());
        }else{ // 递归删除
            deleteDir(file.absoluteFilePath());
        }
    }
    return dir.rmpath(dir.absolutePath()); // 删除文件夹
}

如果不想使用存储Cookie和缓存到本地文件,可以指定:

engineProfile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);//会话和持久性cookie都存储在内存中 
engineProfile->setHttpCacheType(QWebEngineProfile::NoCache);//禁用内存和磁盘缓存。

三、QWebEngineView修改Cookie及缓存文件的存储路径

有关访问链接的信息与持久性cookie和其他持久性数据一起存储在由storageName()返回的存储中。持久性数据存储在通过调用setPersistentStoragePath()设置的子目录中,而高速缓存位于通过调用setCachePath()设置的子目录中。可以通过调用setHttpCacheType()将缓存类型设置为内存中或磁盘上。如果仅设置了存储名称,则会自动创建并命名子目录。如果您手动设置任何值,则应在创建属于配置文件的任何页面之前进行设置。

//指定缓存Cookie的路径
void WebViewHelper::setCachePath(const QString &path)
{
    if(!path.isEmpty())
    {
        QWebEngineProfile * engineProfile = _webView->page()->profile();
        engineProfile->setCachePath(path);//指定高速缓存路径
        engineProfile->setPersistentStoragePath(path);//指定会话和持久性Cookie路径
        engineProfile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);//会话和持久性Cookie均保存到磁盘或从磁盘还原
        engineProfile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);//使用磁盘缓存。
    }
}

以上代码中_webView是QWebEngineView的对象。

QWebEngineView *_webView;

 

原创文章,作者:365开发网,如若转载,请注明出处:https://www.365codes.com/368.html