会话 cookie 在 Electron 中不起作用

Posted

技术标签:

【中文标题】会话 cookie 在 Electron 中不起作用【英文标题】:Session cookies not working in Electron 【发布时间】:2016-11-10 16:26:16 【问题描述】:

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

我必须使用与 cookie 身份验证配合使用的现有后端,但我无法在那里更改任何内容。

从有关 Session 对象[1] 的 Electron 文档中,我收集到我应该使用像 f.e. 这样的分区。 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/

【问题讨论】:

在进一步研究了这个问题之后,似乎这可能是 1.2.2 之后的 Electron 版本的问题,正如 GitHub 上的这个线程中所指出的那样:github.com/electron/electron/issues/6388 1.:检查您的导入,我想“ require('electron'] ”可能会导致一些问题。2.:您可以查看 localStorage API。 @JensHabegger 是的,这是脚本中的错字,抱歉!与此同时,事实证明这是 Electron 中的一个问题,我正在等待带有此修复程序的新版本。 根据我的经验,会话 API 充满了无法解释的行为。在我的应用程序中,我在创建窗口之前获取/设置 cookie,为了真正设置 cookie,我必须先设置它们,然后再次获取它们(如 session.cookies.get(, () => ))。没有意义,但它确实有效。 您是否通过 Chrome 开发工具确认它不在窗口中? (在“应用程序”或“资源”选项卡下查看)。 【参考方案1】:

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

【讨论】:

以上是关于会话 cookie 在 Electron 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Express-Session 在生产/部署中不起作用

按钮 onClick 事件侦听器在 Electron 应用程序中不起作用

loadUrl 在电子中不起作用

如何解决 Vue.js devtools 在 Electron Vue 项目中不起作用的问题?

为啥设置 document.cookie 在 Chrome 中不起作用?

删除 cookie 在 PHP 中不起作用