电子应用程序的sessionStorage和localStorage存储在哪里?

问题描述 投票:0回答:3

我正在运行一个电子应用程序,在其渲染器进程中我使用 HTML5 localStorage。
我有兴趣知道这个 localStorage 实际存储在我的文件系统中的哪个位置(我相信它是 SQLite 格式)。
我在这里看到了 browser localStorage 存储在哪里的答案: sessionStorage 和 localStorage 存储在哪里?

我问这个问题是因为我希望能够运行这个电子应用程序的 2 个实例,以便每个应用程序都有不同的设置,我将这些设置保存在 localStorage 中。
具体来说,我对 Windows 10 最感兴趣,但是包含所有操作系统的答案会很棒。

local-storage electron
3个回答
18
投票

它存储在AppData文件夹中,您可以通过查看

require('electron').app.getPath('userData')
的值找到该文件夹。

这意味着即使应用程序被删除,数据仍然存在。如果您正在运行两个实例,您需要找到某种方法来区分它们,这样它们就不会破坏彼此的数据。


11
投票

我必须在我的 Electron 应用程序中使用以下内容才能使其正常工作:

  const remote = require('electron').remote;
  const app = remote.app;
  app.getPath('userData');

但是,它存储数据的路径是:

\Local Storage\leveldb\

所以你的整个路径将类似于:

C:\Users\<USER-NAME>\AppData\Roaming\<APP-NAME>\Local Storage\leveldb\

日志文件:不是 Sqlite DB 尽管浏览器(在我的例子中是 FireFox)将 localStorage 数据存储在 sqlite 文件中,但 Electron 似乎没有。

相反,它将数据保存在一个奇怪的 .log 文件中,我的文件名为

000003.log

这是我从应用程序控制台运行三个 localStorage.setItem() 命令后的样子。

这是我运行三个命令的 Electron 应用程序的控制台。如果仔细观察图像,您可以将命令与 000003.log 文件中的数据进行匹配。

进一步证明这是存储位置/机制

如果我在控制台中运行 localStorage.getItem("fakeData") 则返回该值。

但是,如果您:

  1. 关闭 Electron 应用程序(必须关闭应用程序,因为它已锁定日志文件)
  2. 删除(或移动)000003.log 文件(或任何你命名的文件)
  3. 再次启动 Electron 应用程序
  4. 打开控制台
  5. 调用 localStorage.getItem("fakeData")

您将不会获得任何回报。

现在完成循环:

  1. 停止你的 Electron 应用程序
  2. 将日志文件复制回 leveldb\ 目录(您必须覆盖上次启动时创建的日志文件)
  3. 启动你的 Electron 应用程序
  4. 打开控制台
  5. 再次运行 localStorage.getItem()。

您将再次看到价值。

LevelDB:谷歌之事

我正在考虑那种疯狂的格式,然后我想到了最终目录的名称(leveldb)。我做了一个 duckduckgo 并发现了这个: https://github.com/google/leveldb

所以我猜测这就是格式,因为 Electron 使用 Chrome 引擎。

来自维基百科

LevelDB 是 Google 编写的开源磁盘键值存储 杰弗里·迪恩 (Jeffrey Dean) 和桑杰·格马瓦特 (Sanjay Ghemawat) 研究员。灵感来自 Bigtable、LevelDB 在新 BSD 许可证下托管在 GitHub 上,并且 已被移植到各种基于 Unix 的系统,macOS、Windows、 和安卓。


0
投票

使用此代码,您可以在

Help
部分添加一个子部分,单击该部分将在文件资源管理器中打开本地存储文件夹。

main.js
/electron
中:

const {
  app,
  BrowserWindow,
  screen: electronScreen,
  shell,
  Menu,
} = require('electron');
...

const menuTemplate = [
  {
    role: 'help',
    submenu: [
      {
        label: 'Open Local Storage Folder',
        click: () => {
          const userData = app.getPath('userData');
          shell.showItemInFolder(`${userData}/Local Storage/leveldb`);
        },
      },
    ],
  },
];

const menu = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menu);
© www.soinside.com 2019 - 2024. All rights reserved.