Nodejs:node-webkit,访问网站,cookies可否变成程序间各自独立的?
Nodejs:node-webkit,访问网站,cookies可否变成程序间各自独立的?
例如,两个客户端,可否做到互相独立的cookies,而不是混一起?谢谢!
当然可以。在 Node-WebKit(现在称为 NW.js)中,你可以通过配置不同的 localstorage
和 cookies
存储路径来实现不同窗口或客户端之间的独立性。这可以通过设置每个窗口的 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');
解释
-
创建窗口:
- 使用
gui.Window.open
方法打开一个新的窗口。 - 每个窗口都有一个唯一的名称 (
windowName
)。
- 使用
-
设置存储路径:
localStoragePath
设置了本地存储的路径,这样每个窗口会使用自己的本地存储文件。partition
设置了浏览器会话的分区,确保每个窗口有自己独立的 Cookie 和其他会话数据。
-
加载事件:
- 在窗口加载完成后显示窗口。
通过这种方式,你可以在 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);
});
示例代码解释:
- 引入 NW.js 模块:使用
require('nw.gui')
引入 NW.js 的主模块。 - 设置用户数据路径:定义一个独特的用户数据路径,确保不同实例之间不会共享数据。
- 创建新窗口:通过
nw.Window.open
创建新的窗口,并将用户数据路径传递给新窗口,以确保其使用独立的 cookie 存储。
方法二:手动管理 Cookies
你也可以手动处理每个请求的 Cookie,这需要你显式地管理和设置每个请求的 Cookie。这可以通过使用 HTTP 客户端库(如 axios
或 request
)并手动设置每个请求的 Cookie 头来实现。
const axios = require('axios');
axios.get('http://example.com', {
headers: {
'Cookie': 'session=abc123; user=john'
}
}).then(response => {
console.log(response.data);
});
示例代码解释:
- 引入 axios 库:使用
axios
作为 HTTP 客户端。 - 发送 GET 请求:在请求头中手动添加 Cookie 字段。
以上方法可以帮助你在不同应用或窗口间实现独立的 cookie 管理。