QWebEngine应用---cookies存储及自动登录

什么是cookies?

浏览器Cookie指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据,当前主流网站和浏览器都使用Cookies来实现自动登录

QWebEngineCookieStore

QWebEngine基于Chromium内核,和Chrome浏览器一样支持cookies的管理和操作。在QWebEngine模块中,QWebEngineCookieStore提供信号信号来获取cookie,提供接口设置cookie。

上一篇文章中我们知道,QWebEngine提供了widget和qml两种框架,对于cookie操作,这两种框架的调用方式会有些不同,widget的使用是基于c++,使用会明了一些,qml需要使用采用些技巧来实现。

 widget

对于widget框架中使用cookie,Qt例子中提供了cookie相关的demo。

 用法很简单,通过view->page->profile->cookieSotre,拿到QWebEngineCookieStore对象后监听信号就可获取当前页面的cookie

qml

qml会有些不一样,qml中的view相当于widget中view和page的集合,WebEngineView有WebEngineProfile对象,但WebEngineProfile没有提供QWebEngineCookieStore对应的qml对象,这貌似不太好办是吧,难道想用cookie功能只能用widget那一套吗?

 

非也非也。

我们可以看到WebEngineProfile继承自QQuickWebEngineProfile,QQuickWebEngineProfile是个c++类,并且支持返回QWebEngineCookieStore对象。说明WebEngineProfile和QWebEngineProfile一样是支持cookies的相关功能的,只是没有暴露对象到qml层。

 如果我们想用WebEngineView中cookies的相关功能,就需要在c++中使用。我们需要把WebEngineProfile对象传到c++层,把WebEngineProfile对象转成QQuickWebEngineProfile类型,这样就能拿到QWebEngineCookieStore对象了。

流程如下

//自定义的c++类型
WebEngineExpand {id: webMgr}//profile
WebEngineProfile {id: webProfieoffTheRecord: trueComponent.onCompleted: {webMgr.setProfile(webProfie)}
}//view
WebEngineView {id: webviewprofile: webProfie
}
void WebMgr::setProfile(QObject *obj)
{Q_D(WebMgr);if(!obj)return;d->m_pWebEngineProfile = qobject_cast<QQuickWebEngineProfile *>(obj);if(!d->m_pWebEngineProfile)return;auto store = d->m_pWebEngineProfile->cookieStore();if(!store)return;connect(store, &QWebEngineCookieStore::cookieAdded, this, [=](const QNetworkCookie &cookie){d->m_pCookieMgr->addCookie(cookie);});auto storeCookies = d->m_pCookieMgr->getAllCookie();foreach (auto cookie, storeCookies) {store->setCookie(cookie, d->m_url);}store->loadAllCookies();
}

自动登录

现在大部分支持登录的web页面都支持自动登录功能,即登录后,关闭浏览器,下次再打开不会让你重新登录,浏览器会自动帮你登录。自动登录的功能是基于cookies来实现的,QWebEngine是否也能实现呢?

答案是肯定的!

页面登录成功后会从服务端返回cookies信息,我们只需把这个cookie信息以文件的方式存在本地,下次打开该页面时加载该cookies信息即可实现自动登录。

cookies信息主要包含域名、路径、过期时间、Name和Value。以下是Chrome浏览器Open cookies.txt插件保存的cookie信息格式,可以参考参考。

代码实现上面也有,执行loadAllCookies后,WebEngineView必须reload才会生效,切记切记。

 结语

以上就是QWebEngineView使用cookies实现自动登录的介绍,流程还是比较清晰的,有需要的可以用B站试试自动登录的效果,后面有时间出个完整的demo。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7759.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合宙Air724UG Cat.1模块硬件设计指南--外部SPI Flash

概述 我们可以通过标准的SPI接口和QSPI接口来外挂flash。区别如下 使用标准SPI接口外挂flash&#xff0c;需要自己实现flash驱动&#xff0c;和自己移植文件系统 使用QSPI接口外挂flash&#xff0c;不需要自己实现flash驱动&#xff0c;也不需要移植文件系统 。通过mount接口挂…

ThreadLocal使用与原理

一、ThreadLocal简介 ThreadLocal叫做线程变量&#xff0c;意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本&#xff0c;那么每个线程可以…

css基础知识十五:如果要做优化,CSS提高性能的方法有哪些?

一、前言 每一个网页都离不开css&#xff0c;但是很多人又认为&#xff0c;css主要是用来完成页面布局的&#xff0c;像一些细节或者优化&#xff0c;就不需要怎么考虑&#xff0c;实际上这种想法是不正确的 作为页面渲染和内容展现的重要环节&#xff0c;css影响着用户对整个…

flutter手写一个底部导航栏

使用了一下flutter提供的导航栏&#xff0c;NavigationBar&#xff0c;不过感觉使用起来不是很方便。 譬如说&#xff1a; 不能直接使用图片资源&#xff0c;需要中间加几层转换把图片转化成icon文本大小及颜色不太好控制状态栏的上边来一个横线也没有相应的样式&#xff0c;等…

【云原生 | 53】Docker三剑客之Docker Compose应用案例一:Web负载均衡

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

Django纪录操作之增删改查

一、单表 1、 添加记录 准备表 from django.db import modelsclass Book(models.Model):title models.CharField(max_length20)price models.DecimalField(max_digits65,decimal_places5)publish models.CharField(max_length30)pub_date models.DateTimeField(auto_now…

Python财经股票数据获取, 保存表格文件

目录标题 前言环境使用:模块使用]:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用]: import requests —> 数据请求模块 pip install requests import csv 第三方模块安装: win R 输入cmd 输…

大数据Doris(五十):Export导出原理

文章目录 Export导出原理 一、原理 二、查询计划拆分 三、查询计划执行 Export导出原理 Doris Export、Select Into Outfile、MySQL dump三种方式数据导出。用户可以根据自己的需求导出数据。此外数据还可以以文件形式通过Borker备份到远端存储系统中&#xff0c;之后可以…

【Linux】Linux项目自动化构建工具-make/makefile

Linux项目自动化构建工具-make/makefile 什么是make/makefile&#xff1f;make/makefile的使用依赖关系依赖方法makefile是如何工作的&#xff1f;为什么要使用makefile呢&#xff1f;makefile是怎么做到的呢&#xff1f;make和make clean.PHONY&#xff1a;伪目标 特殊符号&am…

1 Prometheus-监控简介

目录 1 什么是监控 1.1 技术作为客户 1.2 业务作为客户 2. 监控基础知识 2.1 事后监控 2.2 机械式/模板式/无脑式监控 2.3 不够准确的监控 2.4 静态监控 2.5 不频繁的监控 2.6 缺少自动化或操作繁琐/不便 2.7 监控模式总结 3.监控机制 3.1 探针和内省 3.2 拉取和推…

LangChain大型语言模型(LLM)应用开发(二):Conversation Memory

LangChain是一个基于大语言模型&#xff08;如ChatGPT&#xff09;用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

Unity协程

unity提供了一种类似“多段代码并行执行”的功能&#xff0c;即协程。 我们在定义一个协程的时候&#xff0c;需要遵循类似这样的语法 IEnumerator&#xff08;枚举器接口&#xff09; namespace System.Collections {public interface IEnumerator{object Current { get; }/…