Join the Mozilla’s Test Days event from Dec 2–8 to test the new Firefox address bar on Firefox Beta 134 and get a chance to win Mozilla swag vouchers! 🎁

搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

Firefox 56.0 - What is the new sessionstore file format?

  • 13 个回答
  • 8 人有此问题
  • 1 次查看
  • 最后回复者为 bsfinkel

more options

I had a problem recently. FF 56.0 crashed, and when I went to restart it, the "restore session" window got hidden, so FF started with my single home-page window/tab. When I went to the sessionstore-backups directory, I saw

    recovery,baklz4
    recovery.jsonlz4

I renamed these files, as they were small and obviously contained only the one window and tab. Then I restarted FF, and again it started with only one window and tab. What I had to do was 1) terminate FF, 2) erase the two new recovery files, 3) uninstall FF, and 4) re-install the previous FF 55.0.3. Then FF was able to start and recover my previous FF window/tab configuration. I want to re-upgrade to FF 56./0, but I cannot do this until I understand the new recovery file format and know why FF 56.0 did not restart and use an existing recovery.js, recovery.bak, or previous.js file. I assume that the new file format has an "LZ4" zip compression of the files. Thanks.

--Barry Finkel

I had a problem recently. FF 56.0 crashed, and when I went to restart it, the "restore session" window got hidden, so FF started with my single home-page window/tab. When I went to the sessionstore-backups directory, I saw recovery,baklz4 recovery.jsonlz4 I renamed these files, as they were small and obviously contained only the one window and tab. Then I restarted FF, and again it started with only one window and tab. What I had to do was 1) terminate FF, 2) erase the two new recovery files, 3) uninstall FF, and 4) re-install the previous FF 55.0.3. Then FF was able to start and recover my previous FF window/tab configuration. I want to re-upgrade to FF 56./0, but I cannot do this until I understand the new recovery file format and know why FF 56.0 did not restart and use an existing recovery.js, recovery.bak, or previous.js file. I assume that the new file format has an "LZ4" zip compression of the files. Thanks. --Barry Finkel

被采纳的解决方案

I did upgrade to 56.0 this morning. I did see a sessionstore.jsonlz4 file in the parent directory, which I renamed before the upgrade. I must have missed this file before.

Please keep this open for a few days; then I will mark it as resolved. Thanks.

--Barry Finkel

定位到答案原位置 👍 0

所有回复 (13)

more options

A lot of files in the profile folder are now packed with LZ4 (jsonlz4) to speed up reading and writing these files at startup and this includes sessionstore.jsonlz4 and files in the sessionstore-backups folder. Firefox can still restore an uncompressed sessionstore.js file as a fallback, but that requires to rename/remove present compressed .jsonlz4 files. In some cases it might work to place a sessionstore.js file (renamed recovery.js/bak) in the main profile folder, but you may have to rename the sessionstore-backups folder if that isn't working.

more options

Here is what just happened.

55..0.3 I got a message last night about the update, so I downloaded it. This morning FF was running slowly, so I did an Exit. When firefox.exe was no longer running, I started FF in safe mode. Then FF decided to install the update. When FF started, there were only TWO tabs in ONE windiw - restore session and "what's new in 56.0". The restore serssion tab had a restore of ONLY ONE TAB - my home page. My previous sesssion, 15 windows with multiple tabs was NOT GIVEN AS AN OPTION. I then clicked the X in the upper right corner to cancel Firefox.

Here are the contents of the edfault (sdr) and sessionstore-backups (sr) directory:

sdr: 10/16/2017 08:42 AM 3,288,652 sessionstore.js sd: 10/09/2017 08:34 AM 3,302,926 previous.js

     10/15/2017  09:29 PM         3,468,503 recovery.bak
     10/15/2017  09:30 PM         3,468,541 recovery.js
     10/16/2017  08:47 AM             1,557 recovery.baklz4
     10/16/2017  08:48 AM             1,908 recovery.jsonlz4

As you can see, there is a sessionstore.js file from 55.0.3 when I did the clean Exit. Why is this file not seen and used by 56.0? This makes 56.0 unusable for me.

What I will do now is uninstall 56.0 and re-install 55.0;.3.

--Barry Finkel

more options

After I wrote the info above, I realized that there is a piece of the puzzle - something changed in 56.0. In 55.0 there are in the sessionstore-backups directory:

    recovery.bak
    recovery.js
     previous.js

and in the parent directlory

    sessionstore.js

With 56.0, in the sessionsorw-backups:

    previous.jsonlz4
    recovery.jsonlz4

But I do not know where is the recovery file that 56.0 uses when it restarts. I think that the problem I described in my previous posting is this -- There was an existing file from the last time I installed 56.0; I did not delete it because I had/have no idea where that file is stored and its filename. There is no *.*lz4 file stored in the parent directory.

--Barry Finkel

more options

Firefox 56+ versions use compressed .jsonlz4 files to store session date.

You may have to rename the sessionstore-backups folder and a possible sessionstore.jsonlz4 file in the main profile folder to make Firefox use the sessionstore.js file.

more options

I will have to run a test sometime to see if 56.0 does store a sessionstore.jsonlz4 file when it terminates. I n the parent directory currently there is NO sessionstore.json;z4 file, and I know that I did not rename nor erase any ;z4 files in that directory. If I had seen one, I would have renamed or erased it. When I was running 56.0, I believe that I never did a clean Exit for Firefox to write the restore file in the parent directory. The first time I ran 56.0, it crashed when I was not at the computer. When I started Ff via the crash-report window, FF started in regular mode. When I went to start it in safe mode, I lost all my windows and tabs, so I had to re-install 55.0.3 to be able to read thee existing session-backups recovery file. And I did not re-upgrade to 56.0 until last night and this morning.

Another question - I have written scripts to read and format a .js file. Is there a utility to uncompress a jsonlz4 file into a js file? Thanks.

--Barry Finkel

more options

See:

var {classes:Cc,interfaces:Ci,utils:Cu} = Components;
function decompressFile(oFilePath,nFilePath){
  Cu.import("resource://gre/modules/Task.jsm");
  Cu.import("resource://gre/modules/osfile.jsm");
  return Task.spawn(function* () {
    var jsonString = yield OS.File.read(oFilePath,{compression:"lz4"});
    yield OS.File.writeAtomic(nFilePath, jsonString);})
}
// Set up file chooser
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
var fu = Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils
fp.init(window, "Open File", Ci.nsIFilePicker.modeOpen);
fp.appendFilter("Bookmarks/Session (.jsonlz4)","*.jsonlz4");
fp.appendFilter("Search Engines (.mozlz4)","*.mozlz4");
fp.appendFilter("Add-ons Files (.lz4)","*.lz4");
fp.displayDirectory = fu.File(OS.Path.join(OS.Constants.Path.profileDir, "sessionstore-backups"));
// Call file chooser
fp.open((aResult) => {
  if (aResult == Ci.nsIFilePicker.returnOK) {
  if (fp.file.exists() && fp.file.isFile() && fp.file.isReadable()) {
    var oldfile = fp.file.path;
    var newfile = oldfile + ".json"; // Construct output file name
    try {
      decompressFile(oldfile, newfile);
      console.log("Saved as: \"" + newfile + "\"");
      if(confirm("Open JSON file in a Firefox tab?")){
        var uri="file:///"+newfile.replace(/\\/g, "/");
        window.open(uri, "_blank");
      }
    }
    catch (err) {
      console.log(err);
    }
  }
  }
});

由cor-el于修改

more options

Backups are recommend during this trying (stuff) time.

Normally, after you exit Firefox 56, sesionstore.jsonlz4 is created in the main level of the profile folder.

If that file is missing at startup, you would expect Firefox to check in sessionstore-backups for recovery.jsonlz4 or recovery.baklz4. When Firefox looks for other files is a bit fuzzy in my mind.

There is some method Firefox uses to migrate Firefox 55 session history (uncompressed) to Firefox 56 (compressed), but I don't know what it is. If you were to hide everything except sessionstore.js, I would expect Firefox 56 to discover it at startup and convert it. Of course, I could be very wrong about that.

What kind of code are you using to parse the older JSON files? If it's JavaScript, you can add a library to decompress the new format. That's what I'm doing in this page: https://www.jeffersonscher.com/res/scrounger.html

more options

The code I am using to reformat a .js file is an awk script. The .js file has everything "run-together" with no line splits. My code knows what each line in the file should contain, so I know where to put line breaks. I know that everything in the file is a separator that begins with one of these:

{"tabs": {"entries": {"url":

I do not know javascript. I wrote my first program in 1966 (FORTRAN II), and I have not learned much of the new languages.

I do not have a test system, so any testing I do would be on my real system. I believe, but want to test sometime (or look at the source code for 56.0), that if there is no lz4 restore file in the parent directory, FF 56.0 does not look in the sessionstore-backups directory for a .js restore file. I do not know if you have a test system on which to try this test.

--Barry Finkel

more options

What I could do to test is create a new profile, close Firefox, delete all session history files, copy in the old sessionstore.js file from my regular profile, and then start Firefox again. But at the moment I'm not ready to exit Firefox...

more options

Note that JavaScript has a JSON.stringify() function to format a file for readability.

JavaScript bookmarklet:

javascript:{try{js=JSON.parse(document.body.textContent)}catch(e){js=JSON.parse("["+document.body.textContent+"]")}try{if(js.length==undefined){js=[js]}document.body.innerHTML='<pre>'+JSON.stringify(js,null,1)+'</pre>'}catch(e){alert(e)}}

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

more options

jscher2000 said

What I could do to test is create a new profile, close Firefox, delete all session history files, copy in the old sessionstore.js file from my regular profile, and then start Firefox again. But at the moment I'm not ready to exit Firefox...

This did work:

With Firefox closed

(1) Rename sessionstore-backups folder to HIDEsessionstore-backups (2) Rename sessionstore.jsonlz4 file to HIDEsessionstore.jsonlz4 (3) Copy the old (pre-Fx56) session history file to the main level of the profile folder and rename it to sessionstore.js

After starting, using History > Restore Previous Session restored the copied-in session.

more options

选择的解决方案

I did upgrade to 56.0 this morning. I did see a sessionstore.jsonlz4 file in the parent directory, which I renamed before the upgrade. I must have missed this file before.

Please keep this open for a few days; then I will mark it as resolved. Thanks.

--Barry Finkel

more options

We can close this thread. Thanks for your assistance,.

--Barry Finkel