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