Electron中的会话cookie无法正常工作

14

我正在考虑在构建的Electron[0]应用程序中实现登录系统,但在处理会话部分时遇到了问题。基本上,我想存储用户的会话,以便在应用程序重新启动时持续存在(如果启用“记住我”功能)。

我必须利用现有的后端,该后端使用cookie身份验证,我无法更改任何内容。

从Electron关于Session对象[1]的文档中,我了解到应该使用分区,例如persist:someName,以具有持久性存储,但似乎这不会在应用程序重新启动时持续存在。

我目前设置Cookie的方式如下:

// main-process/login.js

const session = require('electron').session;

const currentSession = session.fromPartition('persist:someName').cookies;

currentSession.set({
    name: 'myCookie',
    url: 'https://www.example.com',
    value: 'loggedin=1',
    expirationDate: 1531036000
}, function(error) {
    console.log('Cookie set');
    if (error) {
        console.dir(error);
    }
});

运行完这个代码后,我看到了 Cookie set 输出,但是当我重新启动应用并运行以下代码时:

// main.js

const session = require('electron').session;

const currentSession = session.fromPartition('persist:someName').cookies;

currentSession.get({}, function(error, cookies) {
    console.dir(cookies);
    if (error) {
        console.dir(error);
    }
});

返回的输出是[]

如果您能提供任何关于我做错了什么或需要做不同的指针,将不胜感激!

[0] http://electron.atom.io
[1] http://electron.atom.io/docs/api/session/


2
经过进一步调查,看起来这可能是Electron 1.2.2之后的版本存在的问题,正如GitHub上的这个帖子所指出的:https://github.com/electron/electron/issues/6388 - Revell
  1. 请检查您的导入,我想 "require('electron']" 可能会引起一些问题。
  2. 您可以尝试使用 localStorage API。
- Jens Habegger
@JensHabegger 是的,这是脚本中的一个笔误,抱歉!与此同时,现在已经发现这是 Electron 中的问题,我正在等待新版本发布并修复此问题。 - Revell
根据我的经验,会话 API 充满了无法解释的行为。在我的应用中,在创建窗口之前我会获取/设置 cookie,为了实际设置 cookie,我必须先设置它们,然后再次获取全部 cookie(如 session.cookies.get({}, () => {}))。虽然不合理,但它始终能够正常工作。 - ccnokes
你通过Chrome开发者工具验证过它不在窗口中吗?(在Application或Resources选项卡下查看)。 - ccnokes
1个回答

1

另一种选择可能是查看electron-json-storage。使用此插件,您可以在用户体验期间将JSON写入系统文件,然后在应用程序加载时调用该文件以替换用户的“状态”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接