电子申请的sessionStorage和localStorage存储在哪里?

时间:2017-05-11 10:33:11

标签: local-storage electron

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

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

2 个答案:

答案 0 :(得分:7)

它存储在AppData文件夹中,您可以通过查看CAST()的值找到该文件夹​​。

这意味着即使删除了应用,数据仍会存在。如果你正在运行两个实例,那么你需要找到一些区分它们的方法,这样它们就不会踩踏彼此的数据。

答案 1 :(得分:2)

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

my_other_value

但是,存储数据的路径在以下位置:

CREATE UNIQUE INDEX unique_num_and_date 
ON foos(my_other_value, date_trunc('day',my_dt));

因此您的整个路径将类似于:

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

日志文件:不是Sqlite DB 即使浏览器(在我的情况下是FireFox)将localStorage数据存储在sqlite文件中,但Electron似乎没有。

相反,它将数据保存在名为\Local Storage\leveldb\ 的奇数.log文件中。

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

example .log file

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

console localStorage.setItem

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

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

localStorage.getItem

但是,如果您:

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

您将没有返回任何值。

null is returned

现在完成循环:

  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,   和Android。