Сохраняемые файлы cookie в Electron 5

#cookies #electron

#файлы cookie #electron

Вопрос:

Я загружаю URL веб-страницы в Electron, за исключением случаев, когда приложение закрыто, файлы cookie пусты после повторного открытия. Я не могу обновить, потому что поддержка плагинов была удалена, поэтому я застрял на версии 5.x. Я пробовал несколько разных вещей, но безуспешно. Каков наилучший способ получить постоянные файлы cookie в Electron 5?

Ниже приведен обходной путь, который я пробовал. Однако это не сработало.

 const {electron, app, BrowserWindow} = require('electron');
const path = require('path')
const fs = require('fs');
const dataPath = app.getPath('userData')
const filePath = path.join(dataPath, 'config');

  mainWindow = new BrowserWindow({
    webPreferences: {
      plugins: true,
      nodeIntegration: false
    }
  });

  try {
    console.log(fs.readFileSync(filePath, 'utf8'))
    mainWindow.webContents.executeJavaScript(
      "document.cookie = '"   fs.readFileSync(filePath, 'utf8')   "';"
    )
  } catch (e) {
    console.log(e)
  }

  mainWindow.loadURL('https://www.example.com/')

  mainWindow.on('close', function () {
    mainWindow.webContents
    .executeJavaScript('document.cookie;')
    .then(cookies => {
      console.log(cookies)
      fs.writeFileSync(filePath, cookies)
    })
  })
 

Ответ №1:

Попробуйте обратиться к этим документам: https://www.electronjs.org/docs/api/cookies

 const { session } = require('electron')

// Query all cookies.
session.defaultSession.cookies.get({})
  .then((cookies) => {
    console.log(cookies)
  }).catch((error) => {
    console.log(error)
  })

// Query all cookies associated with a specific url.
session.defaultSession.cookies.get({ url: 'http://www.github.com' })
  .then((cookies) => {
    console.log(cookies)
  }).catch((error) => {
    console.log(error)
  })

// Set a cookie with the given cookie data;
// may overwrite equivalent cookies if they exist.
const cookie = { url: 'http://www.github.com', name: 'dummy_name', value: 'dummy' }
session.defaultSession.cookies.set(cookie)
  .then(() => {
    // success
  }, (error) => {
    console.error(error)
  })
 

Комментарии:

1. Я тестировал с этим API. В начале он всегда [] пуст, а в случае закрытия всего окна у него есть вещи. Однако при повторном открытии он пуст.

Ответ №2:

Вот что сработало для меня.

   mainWindow = new BrowserWindow({
    webPreferences: {
      partition: 'persist:MyAppSomethingUnique'
    }
  });

  mainWindow.on('did-start-navigation', function() {
    session.defaultSession.cookies.flushStore();
  });

  mainWindow.on('did-navigate', function() {
    session.defaultSession.cookies.flushStore();
  });