美文网首页Electron
electron 中的 cookies 持久化保存到硬盘及恢复现

electron 中的 cookies 持久化保存到硬盘及恢复现

作者: ankerjian | 来源:发表于2019-10-15 16:59 被阅读0次

非经过允许请勿随意转发,尊重版权,感谢。

背景

ElectronBrowserWindow提供比较简易的浏览器界面,但是没有直接提供cookies持久化和恢复的操作,以至于在关闭窗口后,无法恢复cookies

需求

实现cookiesBrowserWindow中持久化,以及重启恢复现场

实现方案

初始化浏览器窗口
const {app, BrowserWindow} = require('electron')
const store = new (require('electron-store'))
const sessionCookieStoreKey = 'cookies.mainWindow'
let browserWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {}
})
恢复现场

通过store提供的本地化接口读取cookies,在浏览器打开前进行cookies恢复。

let promise = new Promise((resolve) => {
                    let cookies = store.get(sessionCookieStoreKey) || [];
                    let recoverTimes = cookies.length;
                    if (recoverTimes <= 0) {
                        //无cookie数据无需恢复现场
                        resolve()
                        return;
                    }
                    //恢复cookie现场
                    cookies.forEach((cookiesItem) => {
                        let {
                            secure = false,
                            domain = '',
                            path = ''
                        } = cookiesItem

                        browserWindow.webContents.session.cookies
                            .set(
                                Object.assign(cookiesItem, {
                                    url: (secure ? 'https://' : 'http://') + domain.replace(/^\./, '') + path
                                })
                            )
                            .then(() => {
                            })
                            .catch((e) => {
                                console.error({
                                    message: '恢复cookie失败',
                                    cookie: cookiesItem,
                                    errorMessage: e.message,
                                })
                            })
                            .finally(() => {
                                recoverTimes--;
                                if (recoverTimes <= 0) {
                                    resolve();
                                }
                            })
                    });
                })
保存cookies现场

通过store提供的本地化接口持久化cookies数据

promise.then(() => {
                //监听cookie变化保存cookie现场
                return new Promise((resolve) => {
                    let isCookiesChanged = false;
                    browserWindow.webContents.session.cookies.on('changed', () => {
                        //检测cookies变动事件,标记cookies发生变化
                        isCookiesChanged = true;
                    });

                    //每隔500毫秒检查是否有cookie变动,有变动则进行持久化
                    setInterval(() => {
                        if (!isCookiesChanged) {
                            return;
                        }
                        browserWindow.webContents.session.cookies.get({})
                            .then((cookies) => {
                                store.set(sessionCookieStoreKey, cookies);
                            })
                            .catch((error) => {
                                console.log({error})
                            })
                            .finally(() => {
                                isCookiesChanged = false;
                            })
                    }, 500);

                    resolve();
                })
            })

相关文章

  • electron 中的 cookies 持久化保存到硬盘及恢复现

    非经过允许请勿随意转发,尊重版权,感谢。 背景 Electron中BrowserWindow提供比较简易的浏览器界...

  • iOS 开发技术选型之数据库:SQLite vs. Core D

    持久化方案 在 iOS 开发中,数据持久化存储是一个很常见的需求。所谓持久化存储,就是将数据存到硬盘,使得应用重启...

  • Redis持久化

    Redis持久化机制 其实绝大多数持久化的方式,都是将数据保存到硬盘中,redis也不例外。 RDB 默认方式,无...

  • iOS 数据持久化

    本文转自iOS中几种数据持久化方案,仅用作个人记录学习之用。 概论 所谓的持久化,就是将数据保存到硬盘中,使得在应...

  • redis持久化

    redis持久化 RDB RBD持久化是把当前进程数据生成快照保存到硬盘的过程,处罚RDB持久化过程分为手动触发和...

  • 2020-09-05

    1、 Redis持久化机制 Redis是一个支持持久化的内存数据库,通过持久化机制把内存中的数据同步到硬盘文件来保...

  • iOS-数据持久化

    持久化:将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。 持久化数据的方式: 文件存储:...

  • redis RDB持久化

    RDB:redis数据从内存到硬盘的快照,用于数据持久化 一、save命令持久化(同步) 执行方法redis客户端...

  • Persist Data - 数据的持久化存储

    所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。 数据的持久化存储: ...

  • 数据持久化

    一. 什么是持久化 所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。 ...

网友评论

    本文标题:electron 中的 cookies 持久化保存到硬盘及恢复现

    本文链接:https://www.haomeiwen.com/subject/fgbsmctx.html