我想从 BrowserWindow 对象获取所有 cookie,包括 HTTPonly cookie。
我已经通读了以下代码将输出 BrowserWindow 中使用的所有 cookie 的文档:
windowObject.webContents.session.cookies
。
这将返回一个空的 cookie 对象:Cookies:{}
。
如果我使用以下代码,我会得到所有的 cookie,除了非常需要的 HTTPonly(出于安全目的不会返回):
return windowObject.webContents.executeJavaScript(`document.cookie;`,true).then(function(result){
console.log(result);
});
问题的证明; 将此代码放入您的 app.on('ready') 函数中:
const Window = electron.BrowserWindow;
var windowObject = new Window({show: true, webPreferences:{images:false}});
windowObject.loadURL("https://www.tweakers.net");
windowObject.webContents.on('did-finish-load', function() {
console.log(windowObject.webContents.session);
console.log(windowObject.webContents.session.cookies);
windowObject.webContents.executeJavaScript(`document.cookie;`, true).then(function(result){
console.log(result);
});
});
返回(这是我 chop 的):
为什么 session 不返回任何 cookie?如何解决?
我正在使用 Electron:1.7.5
提前感谢您的帮助!
最佳答案
windowObject.webContents.session.cookies
返回 defaultSession session 对象。这让我误以为有一个唯一的 session
对象绑定(bind)到 windowObject
对象。
在我的案例中,可以通过以下代码检索 cookie:
const electron = require('electron');
const Window = electron.BrowserWindow;
var windowObject = new Window({show: true, webPreferences:{images:false}});
windowObject.loadURL("https://www.tweakers.net");
windowObject.webContents.on('did-finish-load', function() {
windowObject.webContents.session.cookies.get({}, (error, cookies) => {
console.log(cookies);
});
});
也可以通过以下代码获取所有cookies:
const electron = require('electron');
const session = electron.session;
return session.defaultSession.cookies.get({}, (error, cookies) => {
console.log(cookies);
});
例如,可以对这些进行过滤以获得属于某个域名的正确 cookie。为此,只需简单地使用:
anySessionObject.cookies.get({domain: "yourdomain.com"}, (error, cookies) => {
console.log(cookies);
});
有关我的发现的票证已在 GitHub 上打开。您可以在这里查看:https://github.com/electron/electron/issues/10364
关于javascript - Session.cookies 为空而 JavaScript document.cookie 不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45894850/