electron持久化cookie的方法,从session中获取

文章目录

  • 1. 持久化方法
  • 2. 代码说明
  • 3. 补充

1. 持久化方法

session.defaultSession.cookies.get({}).then((cookies) => {// 恢复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(() => {});});}).catch((error) => {console.log(error);});

2. 代码说明

electron 官网在 session 文档 的 类:Cookies 给出了相应的 cookie 的获取和其他操作方法,这种获取方法.get会连同 BrowserView 中的 cookie 一同获取,主要是通过session.defaultSession.cookies.get方法获取的:

const { session } = require("electron");// Query all cookies.
session.defaultSession.cookies.get({}).then((cookies) => {console.log(cookies);}).catch((error) => {console.log(error);});

获取到以后,使用BrowserWindow.webContents.session.cookies.set对异步获得的cookies进行设置,将cookies恢复至 BrowserWindow 或 BrowserView 即可。

在开发模式中,session可以持久化,但是 打包后 ,就不行了,因此还需要结合 store 进行持久化!!!也很简单,把session.defaultSession.cookies.get获取的cookies保存到store就好

3. 补充

为什么要进行如下设置?必须设置secure = false吗?

   cookies.forEach((cookiesItem) => {let {secure = false,domain = '',path = ''} = cookiesItem

GPT 的回答如下:
在 Web 开发中,secure 是 HTTP Cookie 的一个属性,它指定了一个 Cookie 是否只能通过 HTTPS 协议进行传输。当 secure 属性设置为 true 时,表示该 Cookie 只能在通过加密的 HTTPS 连接时发送到服务器,而在使用非加密的 HTTP 连接时不会发送。

将 secure 属性设置为 false 有一些潜在的风险,因为这样的 Cookie 可能会在不安全的网络中被窃取。如果在不安全的环境中使用敏感信息(例如用户的身份验证凭据)并且 secure 属性被设置为 false,那么这些信息可能会被中间人攻击者截取。因此,为了加强安全性,通常建议将 secure 属性设置为 true,特别是对于包含敏感信息的 Cookie。

在某些情况下,可能会有一些开发或测试的需求,需要在非 HTTPS 环境下使用 Cookie。在这种情况下,将 secure 属性设置为 false 可能是合适的。但在生产环境中,强烈建议将 secure 属性设置为 true,以确保敏感信息的安全传输。