node.js - 如何从 express/node 应用程序在“.localhost”上设置 cookie,以便可以从“something.localhost”访问它
问题描述
我有一个在 www.localhost:1234 运行的 node/express 应用程序。现在我想在域“.localhost”中设置一个来自 express 的 httponly cookie。并希望在“something.localhost:1234”或“something.localhost:1234”等子域上访问它。我试过这样做但没有工作。
js
let options = {
path:'/*',
domain:'.localhost',
httpOnly: true,
maxAge: (1000 * 60 * 60 * 24)
};
res.cookie('cookieName', 'cookieValue', options);
提前致谢...
解决方案
您可以为子域设置 cookie。
当 DNS 解析树时,子域是根域的子节点。要成为有效的根域,它应该有 2 个由点分隔的部分。
因此,即使something.localhost
解析为与.localhost
something.localhost
localhost
解决方案,
在/etc/hosts
.
127.0.0.1 app.com ## <- Becomes root domain
127.0.0.1 api.app.com
127.0.0.1 something.app.com
操作:现在,使用加载您的 Web 应用程序app.com:4000
并使用相应的 api api.app.com:4001/users
(服务器在端口 4001 上运行)
但是现在,存储的 cookie 将对应于 domain api.app.com
。要解决此问题,您需要将 cookie 中的域设置为app.com
(无论您的根域是什么)。
解决方案:
我正在使用express-session 1.16.2
,我的配置看起来像
app.use(session({
secret: 'some-key',
name: '_somecookie',
resave: false,
saveUninitialized: true,
cookie: { domain: 'app.com', secure: false }, // <- THIS, set domain as 'app.com'
store: myRedisStore,
}));
现在再次执行您的操作。您应该会看到一个与域对应的 cookie,该 cookie由根域.app.com
下的所有 Web 应用程序共享,例如:检查和或下的 cookie 。 app.com
app.com:4000
api.app.com:4000
something.app.com:4000
注意 1:api.app.com
确保 在执行ACTION 1st 时
清除与域对应的任何 cookie (通过api.app.com:4000
在浏览器中打开检查),否则,根据您的服务器实施,如果 cookie 已经存在,您可能不会重新设置它。
注 2
由于app.com
是向 发出 http 请求api.app.com
,请确保正确设置 CORS 标头,例如:
res.header("Access-Control-Allow-Origin", 'http://app.com:4000');
使用express cors 中间件轻松将多个子域/域列入白名单。
推荐阅读
- python - 在Django中实现无限滚动期间对内容进行排序以反转
- reactjs - 即使在使用 OnChange 侦听器并更新状态后也无法编辑表单
- c - 如何通过在 C 中丢帧来降低传入流的 fps
- r - 同时使用ggplot进行分组和着色
- java - 当我们在 linux 中为 selenium 执行“mvn test”时,不会创建日志文件夹
- arrays - 在 mongodb 的嵌套数组中的过滤器后包含数组索引
- html - 为什么悬停后看不到特定部分?
- sql-server - 如何在 SQL Server 2008 中获取一行中的计数
- dax - PowerPivot DAX 日期查找
- python - 在文本文件中搜索并保存在 Excel 中