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

news2025/1/11 0:31:01

什么是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: webProfie
    offTheRecord: true

    Component.onCompleted: {
        webMgr.setProfile(webProfie)
    }
}

//view
WebEngineView {
     id: webview
     profile: 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.coloradmin.cn/o/717222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信聚合聊天,轻松一人管理多个微信

看这篇文章的你是否有以下烦恼&#xff1a; 1.微信账号太多&#xff0c;管理过于麻烦 2.微信号多&#xff0c;需要很多员工来管理&#xff0c;人工费用多 3.多个微信打开后会造成微信登陆界面过多&#xff0c;切换操作十分不方便 4.当微信多的时候&#xff0c;新消息提示也多…

docker安装nacos并配置数据库

1、下载镜像 docker pull nacos/nacos-server 查看下载镜像 docker images 2、启动nacos 注意&#xff1a;如果nacos版本在2.0及以上&#xff0c;需要把8848、9848和9849三个端口映射出来&#xff0c;否则访问会404失败 docker run --env MODEstandalone \ --name nacos -d…

【AI新趋势期刊#2】AI发明计算机算法,如何给大模型排行,照片秒变二维码,视频一键动漫风

前言 每天都要浏览大量AI相关新闻&#xff0c;是不是感到信息量爆炸&#xff0c;有效信息少&#xff1f; 这么多新产品和新工具&#xff0c;到底哪些是真正是有价值的&#xff0c;哪些只是浮躁的一时热点&#xff1f; 想参与AI产品和工具的开发&#xff0c;从哪里能够获得大…

MongoDB【MongoDB命令、CRUD操作 】(二)-全面详解(学习总结---从入门到深化)

目录 MongoDB命令 CRUD操作 MongoDB命令 基本操作 查看数据库 show dbs; 切换数据库 如果没有对应的数据库则创建 use 数据库名;创建集合 db.createCollection("集合名") 查看集合 show tables; show collections; 删除集合 db.集合名.drop(); 删除当前…

Robust Secure Aggregation with Lightweight Verification for Federated Learning

摘要&#xff1a; 可验证的安全聚合&#xff08;VSA&#xff09;是联邦学习&#xff08;FL&#xff09;中的关键过程&#xff0c;其中安全聚合实现局部梯度聚合&#xff0c;同时保留数据机密性&#xff0c;并且可验证性使参与者能够验证中央服务器&#xff08;CS&#xff09;返…

【Linux】程序替换

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;✈️Linux之路       &#x1f6f0;️社区 :✈️ 进步学堂       &a…

51单片机地震监测语音报警提示系统MPU6050TTS报警

实践制作DIY- GC0153--- 地震监测语音报警提示系统 基于51单片机设计------- 地震监测语音报警提示系统 二、功能介绍&#xff1a; STC89C52单片机TTS语音播报模块MPU-6050角度传感器LED灯显示一个按键 1.获取MPU-6050角度数据&#xff0c;然后根据角度数据计算出0~10级的地震…

B站w_rid,qv_id加密分析

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;若有侵权请联系我删除&#xff01; 网站地址&#xff1a;aHR0cHM6Ly9zZWFyY2guYmlsaWJpbGkuY29tL2FsbD92dD03OTExMjUwNSZrZXl3b3JkPSVFNyU4OCVBQyVFOCU5OSVBQg 关键字搜…

Flutter 布局构建

文章目录 一、布局类组件简介二、理解 Flutter 布局约束三、线性布局&#xff08;Row和Column&#xff09;1. 主轴和纵轴2. Row3. Column4. 特殊情况 四、弹性布局&#xff08;Flex 和 Expanded&#xff09;1. Flex2. Expanded 五、流式布局&#xff08;Wrap 和 Flow&#xff0…

记录一次Ubuntu系统安装tenforflow

电脑已有版本 Ubuntu 20.04GCC 9.4.0CUDA 11.3 需要指定版本的python库 tensorflow 2.6.0numpy 1.19.2matplotlib 3.4.0keras 2.6.0protobuf 3.19.6 我的环境

LeetCode刷题 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "…

Flutter Bloc组件buildWhen的妙用

在Flutter中当状态发生改变的时候,Widget会重新build刷新页面。但是当状态发生改变的时候后,我们指向让有关联的Widget重绘,与之无关的Widget保持不变,比如对于登录页面,有用户名和密码两个组件:如下图。 构建代码如下: 当我们输入用户名的时候,仅仅希望_UserNameInp…

C语言王国探险记之转义字符+结构语句

王国探险记系列 文章目录&#xff08;4&#xff09; 一&#xff0c;什么是转义字符 1.1转义字符的重要性&#xff1f; 二&#xff0c;了解一下转义字符有那些 三&#xff0c;精讲转义字符 3.1转义字符\n 3.2转义字符\? 3.3转义字符 \‘和\" 3.3转义字符 \\ 3.4转义字…

【云原生丶Kubernetes】Kubernetes初体验

人生若只如初见&#xff0c;何事秋风悲画扇。 前言 Kubernetes 是目前最流行的容器编排工具之一&#xff0c;由Google开发并维护。它提供了完整的容器编排解决方案&#xff0c;包括自动化部署、资源管理和调度、服务发现和负载均衡等功能。 然而&#xff0c;对于初学者来说&a…

Android Studio实现内容丰富的安卓民宿酒店预订平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号106 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看民宿 3.民…

缔造网络世界的奇迹:OSI参考模型的魔力之旅

文章目录 一 OSI参考模型1.1 OSI参考模型简介1.2 OSI参考模型的下特性和优点1.3 OSI参考模型的层次结构1.4 OSI参考模型层次间的关系以及数据封装 二 OSI参考模型的层次结构详解2.1 物理层2.2 数据链路层2.3 网络层2.3.1 网络层地址2.3.2 路由协议与可路由协议2.3.3 面向连接和…

激光SLAM(二):点云拟合和平面参数化

点云拟合和平面参数 一、平面拟合&#xff1a;特征值法和SVD法二、平面参数化1&#xff09;Hesse形式2&#xff09;球坐标3&#xff09;最近点4) 单位四元数 三、直线拟合 一、平面拟合&#xff1a;特征值法和SVD法 平面方程如下&#xff0c;n是法向量&#xff0c;d是截距 当…

python协程—asyncio模块

目录 什么是协程 协程的特点 为什么使用协程 asyncio协程模块 多任务的协程 总结 什么是协程 协程&#xff08;Coroutine&#xff09;是一种并发编程的技术&#xff0c;它允许程序在执行过程中暂停和恢复。协程可以看作是一种特殊的函数&#xff0c;它可以暂停执行&#…

快速安装Kibana,head插件以及IK分词器

安装Kibana Kibana是基于node.js的,安装这个之前要先安装node.js 1 压缩包下载地址: Kibana 6.2.4 | Elastic 2.将下载的Kibana压缩包解压到任意一个没有中文没有空格的目录下,进入Kibana安装目录下的config目录&#xff0c;修改kibana.yml文件&#xff0c;添加Elasticsearch服…

钳形表校准装置 “定点输出”方式

装置具有“定点输出”方式&#xff0c;通过点击触摸屏&#xff0c;直接设置所需输出的量值&#xff0c;装置将全自动切换至最佳量程输出&#xff0c;使得校准数字式仪表变得非常方便。特别是在设定交流电压/电流输出时&#xff0c;直接同时输入幅值和频率即可&#xff0c;使用十…