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,以确保敏感信息的安全传输。

你可能感兴趣的:(electron,javascript,前端)