博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC调用CEF实现单页面单COOKIE管理《转》
阅读量:5150 次
发布时间:2019-06-13

本文共 1510 字,大约阅读时间需要 5 分钟。

cookie简单介绍

cookie存储了网站的一些很重要的信息,如用户身份信息、常用设置、设置地理位置等等各种信息。

使用cef访问网站时,如果设置了CefSettings.cache_path参数,则cookie等相关信息会保存在该目录下,若未设置则会保存在程序的内存中。

CefSettings settings;    CefString(&settings.cache_path) = L"D:\\cefcookie";
C++
Copy

下图是访问 www.baidu.com 页面保存在指定位置的网站数据,可以看的其中也包括Cookies信息:

多页面共享cookie问题

有时某个网站我们想登录多个账号,但是会发现登录新的账号后,旧账号就退出了,即便打开多个浏览器操作结果也是一样的。这是因为新登录账号的cookie覆盖了旧账号的cookie,旧账号自然就失效了。

google chrome提供了一种“无痕窗口”模式,在菜单栏可以打开无痕窗口,该模式不会保存cookie等网站信息,旨在保护用户隐私。发现在该模式下登录的账号和在普通页面上登录的账号,可以同时保持在线,其实就是因为cookie等信息存储在不同的位置,不会互相覆盖。

若设置了CefSetting.cache_path,则所有页面cookie都会保存在该目录下,当登录某网站多个账号时,cookie被覆盖,就只能保持一个账号在线了。若不设置cache_path则cookie会保存在内存中,登录多个账号时cookie同样会被覆盖。

单页面cookie存储位置设置

解决上述问题,自然想到把每个页面的cookie单独存储就好了。在创建浏览器时通过CefRequestContextSettings可以指定页面cookie等信息存储位置,如下代码:

// 创建浏览器void CefHelper::CreateBrowser(CWnd* parent, CRect rc, CString strUrl, CString strCookiePath, bool bShow) { m_handler = new CSimpleHandler(false); CefWindowInfo winInfo; winInfo.SetAsChild(parent->GetSafeHwnd(), rc); CefRequestContextSettings settings; CefString(&settings.cache_path).FromWString(wstring(strCookiePath)); CefRefPtr
handlerCookie = new WXRequestContextHandler(wstring(strCookiePath).c_str()); CefRefPtr
rContext = CefRequestContext::CreateContext(settings, handlerCookie); CefBrowserSettings browserSettings; CefBrowserHost::CreateBrowser(winInfo, m_handler, wstring(strUrl).c_str(), browserSettings, rContext); }
C++
Copy
 

文章导航

 

转载于:https://www.cnblogs.com/wainiwann/p/10953658.html

你可能感兴趣的文章
Shell文本处理 - 分割合并与过滤
查看>>
Java 按页拆分pdf
查看>>
我要翻译《Think Python》 - 开篇申明
查看>>
MS SQL Server2012中的CONCAT函数
查看>>
不一样的编辑器
查看>>
博客园安家--写给自己
查看>>
B/S和C/S架构的区别
查看>>
[Java] Java record
查看>>
jQuery - 控制元素显示、隐藏、切换、滑动的方法
查看>>
postgresql学习文档
查看>>
python 列表中的数字转为字符串
查看>>
Struts2返回JSON数据的具体应用范例
查看>>
js深度克隆对象、数组
查看>>
c++ 贪吃蛇
查看>>
socket阻塞与非阻塞,同步与异步
查看>>
图论求割点模板
查看>>
poj3903 Stock Exchange 二分+dp
查看>>
Okhttp代码
查看>>
点击树结构实现变色
查看>>
【IT笔试面试题整理】字符串的排列
查看>>