Nodejs:node-webkit,访问网站,cookies可否变成程序间各自独立的?

Nodejs:node-webkit,访问网站,cookies可否变成程序间各自独立的?

例如,两个客户端,可否做到互相独立的cookies,而不是混一起?谢谢!

4 回复

当然可以。在 Node-WebKit(现在称为 NW.js)中,你可以通过配置不同的 localstoragecookies 存储路径来实现不同窗口或客户端之间的独立性。这可以通过设置每个窗口的 node-webkit 实例中的 webPreferences 属性来实现。

示例代码

// main.js
const gui = require('nw.gui');

function createWindow(url, windowName) {
    const win = new gui.Window.open(url, {
        title: windowName,
        width: 800,
        height: 600,
        frame: true,
        show: false,
        'node-remote': '*',
        'toolbar': false,
        'window': {
            'webPreferences': {
                'localStoragePath': `./localStorage/${windowName}`,
                'partition': windowName
            }
        }
    });

    win.on('loaded', () => {
        console.log(`Window ${windowName} loaded`);
        win.show();
    });

    return win;
}

const window1 = createWindow('https://example.com', 'window1');
const window2 = createWindow('https://example.com', 'window2');

解释

  1. 创建窗口

    • 使用 gui.Window.open 方法打开一个新的窗口。
    • 每个窗口都有一个唯一的名称 (windowName)。
  2. 设置存储路径

    • localStoragePath 设置了本地存储的路径,这样每个窗口会使用自己的本地存储文件。
    • partition 设置了浏览器会话的分区,确保每个窗口有自己独立的 Cookie 和其他会话数据。
  3. 加载事件

    • 在窗口加载完成后显示窗口。

通过这种方式,你可以在 Node-WebKit 中为每个窗口创建独立的存储环境,包括 Cookie 和本地存储,从而确保不同窗口之间的数据隔离。


想弄小号啊:) 弄好了,告诉我O(∩_∩)O哈哈~

我去,真实目的这么快就被发现了。。 用vmware还是太累赘,node-webkit看似很有搞头的样子,呵呵呵呵

Node.js 使用 node-webkit(现在通常称为 NW.js)时,默认情况下,所有的 cookies 都是共享的。不过,你可以通过一些方法来实现不同应用或不同窗口间的 cookie 独立性。

方法一:使用不同的用户数据目录

每个应用可以配置一个独立的用户数据目录,这样它们会拥有独立的 cookie 存储空间。具体操作可以通过设置 nw.App.user_data_path 来实现。

var nw = require('nw.gui');
// 创建一个唯一的用户数据路径
var userDataPath = __dirname + '/unique_user_data';

// 设置用户数据路径
nw.App.user_data_path = userDataPath;

// 启动一个新的窗口
var win = new nw.Window.open('http://example.com', {
    user_data_path: userDataPath
}, function(newWin) {
    console.log('New window opened:', newWin);
});

示例代码解释:

  1. 引入 NW.js 模块:使用 require('nw.gui') 引入 NW.js 的主模块。
  2. 设置用户数据路径:定义一个独特的用户数据路径,确保不同实例之间不会共享数据。
  3. 创建新窗口:通过 nw.Window.open 创建新的窗口,并将用户数据路径传递给新窗口,以确保其使用独立的 cookie 存储。

方法二:手动管理 Cookies

你也可以手动处理每个请求的 Cookie,这需要你显式地管理和设置每个请求的 Cookie。这可以通过使用 HTTP 客户端库(如 axiosrequest)并手动设置每个请求的 Cookie 头来实现。

const axios = require('axios');

axios.get('http://example.com', {
    headers: {
        'Cookie': 'session=abc123; user=john'
    }
}).then(response => {
    console.log(response.data);
});

示例代码解释:

  1. 引入 axios 库:使用 axios 作为 HTTP 客户端。
  2. 发送 GET 请求:在请求头中手动添加 Cookie 字段。

以上方法可以帮助你在不同应用或窗口间实现独立的 cookie 管理。

回到顶部