在Electron中如何设置带有`__Host-`前缀的session cookie?
__Host-前缀Cookie属于W3C定义的安全Cookie类型,底层Chromium内核会对这类Cookie做强制校验,原有代码缺少必填配置项,因此触发解析失败报错,该规则属于Web通用标准,因此未单独写入Electron的API文档。
强制配置要求
设置__Host-前缀的Cookie必须满足以下所有规则:
- 必须显式指定
secure属性为true - 必须显式指定
path属性为/ - 禁止设置
domain属性,否则会直接校验不通过 - 配置中的
url参数必须为HTTPS协议地址,和Cookie的适用站点完全匹配
修改后的可运行代码
var cookie = { url: cookieurl, // 注意必须是HTTPS协议地址 name: cookiename, // __Host-开头的Cookie名称 value: cookievalue, secure: true, // __Host前缀Cookie必填项 path: '/' // __Host前缀Cookie必填项 // 请勿添加domain属性 }; win.webContents.session.cookies.set(cookie) .then(function(result) { loadUrl(win, indexUrl, output); }) .catch(function(e) { throw Error("Failed to load cookie, e="+e); });
如果需要保留会话级Cookie的属性,不需要额外添加expirationDate配置即可,默认创建的就是仅当前会话有效的Cookie。
异常排查
如果修改配置后依然报错,可按以下顺序排查:
- 确认
cookieurl是HTTPS协议,路径无多余参数 - 确认Cookie名称的
__Host-前缀大小写正确,必须为两个下划线开头,后接大写字母H - 确认没有传入不符合规范的额外属性,例如
sameSite若设置为None也需要配套secure: true,已经配置的情况下不受影响
内容的提问来源于stack exchange,提问作者Mikko Rantalainen
相关产品推荐
相关产品推荐

