多个窗口独立cookie

问题描述 投票:0回答:2

我想编写一个 electron 应用程序,它基于多个窗口。

使用此应用程序,我希望能够在不同窗口中使用不同角色登录网络应用程序。

因此,我需要一个功能来将cookie存储在应用程序不同位置的不同窗口中。 HTML、JS 代码和 cookies 窗口 A 的数据应该看不到 窗口 B 的数据。

或者,我可以以某种方式想象陷阱设置cookie请求并将它们保存在内存中,因此不使用HD上的应用程序全局cookie存储

有人可以提供此功能的代码吗?

我知道这篇文章,它解释了如何userData

app.setPath()
。不幸的是
userData
是应用程序全局的,而不是例如本地窗口。

如果我现在能够捕获每个

BrowserWindow
的每个 cookie-set 操作,我就可以使用
app.setPath()
并根据窗口切换 cookie 存储,陷阱就会被触发。

electron
2个回答
0
投票

我确实找到了解决方案:

首先创建一个分区。给它命名吧

SomeNameForMySession 
:

const partition = 'persist:SomeNameForMySession'

然后将 partition 传递给 BrowserWindow,就像在创建时一样:

var ctrlWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
        partition: partition
    }
})

如果另一个 BrowserWindow 获得另一个名称不同的 partition,则窗口具有完全分离的 cookie。 如果另一个 BrowserWindow 获得相同的 partition,则窗口共享 cookie 存储。

使用此功能,您可以跟踪在指定分区的会话中发生的 cookie 事件

// First find the correct session based on the partitions name
const ses2 = session.fromPartition( partition2 )

// Then, add a listener
ses2.cookies.addListener( 'changed', function ( event, cookie, cause, removed ) {
    console.log('COOKIE: ' + cookie.name + ' :: ' + cookie.value )
})

0
投票

我尝试了同样的解决方案。但对我来说,它仅在我第一次登录时有效。在我关闭应用程序并使用同一分区再次加载它后,不会保存任何会话数据(例如登录信息)。所有内容都被删除,我被重定向到登录页面。你知道为什么会发生这种情况吗?这是我生成窗口的代码:

 let chatWindow = new BrowserWindow({
    parent: mainWindow,
    width: mainWindow.getSize()[0] - 15,
    height: mainWindow.getSize()[1] - headerHeight,
    x: chatWindowX,
    y: chatWindowY,
    webPreferences: {
        preload: path.join(__dirname, 'preload.js'),
        partition: `persist:${chat.id}`
    },

我稍后使用相同的代码再次打开窗口,并且 chat.id 相同,因此分区值应该相同,但它忘记了所有登录信息。

© www.soinside.com 2019 - 2024. All rights reserved.