【问题标题】:Where an electron application's sessionStorage and localStorage stored?电子应用程序的 sessionStorage 和 localStorage 存储在哪里?
【发布时间】:2017-10-10 07:25:41
【问题描述】:

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

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

【问题讨论】:

    标签: local-storage electron


    【解决方案1】:

    它存储在 AppData 文件夹中,您可以通过查看 require('electron').app.getPath('userData') 的值找到该文件夹​​。

    这意味着即使删除应用程序,数据也会保留。如果您正在运行两个实例,则需要找到某种方法来区分它们,这样它们就不会践踏彼此的数据。

    【讨论】:

    • 非常好,对我有用。顺便说一句,我能够启动应用程序的 2 个实例,每个实例加载存储在 localStorage 中的不同设置的方式是用不同的域启动每个实例,例如localhost 上的不同端口 - 因此每个端口都接收不同的 localStorage。
    • 我希望我的 ($rootScope.fPath = file_path[0] + "\\bin";) $rootScope 数据保持不变。每当我打开我的应用程序时,之前选择的路径必须已经存在。
    • 这个答案不再有效,正确的代码应该是require('electron').app.getPath('userData')
    • @oleiba 我也想做类似的事情。我针对不同的环境有不同的构建,并且在并行运行它们时,本地存储发生冲突并且会话存在问题。你能帮我解决这个问题吗?
    【解决方案2】:

    我必须在我的 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 : Google Thing

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

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

    From Wikipedia:

    LevelDB 是由 Google 编写的开源磁盘键值存储 研究员 Jeffrey Dean 和 Sanjay Ghemawat。灵感来自 Bigtable,LevelDB 在新 BSD 许可证下托管在 GitHub 上,并且 已移植到各种基于 Unix 的系统,macOS、Windows、 和安卓。

    【讨论】:

      猜你喜欢
      • 2012-01-27
      • 1970-01-01
      • 2015-09-01
      • 2011-11-26
      • 1970-01-01
      • 2019-06-25
      • 2013-11-20
      • 2021-05-03
      相关资源
      最近更新 更多