Electron 会话、网络与本地存储
🎯 引言
桌面应用通常需要记住服务地址、登录状态和用户偏好。本篇只介绍常见的保存位置和使用边界,不实现完整登录系统。
🧱 选择合适的存储方式
| 内容 | 适合位置 | 说明 |
|---|---|---|
| 页面临时状态 | Vue 响应式数据 | 关闭窗口后消失 |
| 普通应用配置 | JSON 配置文件 | 例如主题、服务地址 |
| 网站会话 | Cookie / session | 由请求和网页会话使用 |
| 敏感凭证 | 系统凭证存储 | 不要明文写进普通配置文件 |
不要把密码、长期令牌直接放进 localStorage 或普通 JSON 文件。真实项目应使用系统提供的安全凭证存储,并设置退出登录时的清理流程。
🛠 保存普通配置
主进程可以使用 Node.js 的路径和文件 API 保存普通设置:
const { app } = require('electron/main');
const path = require('node:path');
const { readFile, writeFile } = require('node:fs/promises');
const settingsPath = path.join(app.getPath('userData'), 'settings.json');
async function saveSettings(settings) {
await writeFile(settingsPath, JSON.stringify(settings, null, 4), 'utf8');
}
async function loadSettings() {
try {
return JSON.parse(await readFile(settingsPath, 'utf8'));
} catch {
return { theme: 'system' };
}
}
app.getPath('userData') 会返回当前用户专门保存应用数据的目录。例如:
- macOS:
~/Library/Application Support/应用名称 - Windows:
C:\Users\用户名\AppData\Roaming\应用名称 - Linux:
~/.config/应用名称
这里的“项目目录”是你开发时放 package.json 和源码的文件夹;“安装目录”是用户安装应用后,存放应用程序文件的地方。这两个位置都不适合保存用户配置:项目目录只属于开发环境,安装目录可能没有写入权限,应用更新时也可能被替换。
userData 则属于当前用户,适合保存主题、服务地址等普通设置。上面的 settingsPath 最终就是把 settings.json 放在这个目录里。
🌐 读取会话信息
如果 Electron 窗口打开了一个需要登录的网页,登录成功后,网站通常会把登录凭证保存为 Cookie。之后这个窗口再次请求同一个网站时,Electron 会自动带上 Cookie,用户就不需要每次重新登录。
这些 Cookie 由窗口的 session 管理。大多数时候我们不需要自己读取 Cookie,只有在需要显示登录状态或排查登录问题时,才会读取它:
const cookies = await win.webContents.session.cookies.get({
url: 'https://example.com',
});
console.log('当前会话 Cookie 数量:', cookies.length);
这段代码的作用只是查看当前窗口保存了多少个该网站的 Cookie。它不会自动登录,也不会凭空创建登录状态。
用户点击“退出登录”时,可以清理这个网站的 Cookie:
await win.webContents.session.clearStorageData({
origins: ['https://example.com'],
storages: ['cookies'],
});
win.reload();
清理后重新加载页面,网站就会发现登录 Cookie 不存在,通常会回到登录页面。origins 用来限制清理范围,避免误删其他网站的会话。
session 管理的是网页登录状态,app.getPath('userData') 管理的是应用配置文件,它们解决的是两件不同的事。🧾 小节总结
- 临时状态、普通配置、Cookie 和敏感凭证应分开保存。
- 普通配置可以保存到
app.getPath('userData')。 - Cookie 由窗口的
session管理。 - 退出登录时要清理会话数据。
- 敏感凭证不能明文写入配置文件。
❓ 知识问答
Q1:为什么不把配置放在项目目录?
A:安装目录可能没有写入权限,更新应用时也可能被覆盖。
Q2:Cookie 和普通配置文件有什么区别?
A:Cookie 主要服务于网页请求,会随会话规则发送;配置文件适合保存主题、地址等应用设置。
🧪 小练习
把下面的设置对象保存到 userData 目录:
const settings = {
// 请在这里编写代码
};
🎉 现在你已经能为桌面应用规划基本的会话和配置存储了。
