node.js - 在多个 dynos heroku 应用程序的 express 应用程序上设置 session

标签 node.js mongodb session heroku express

我已经使用 express (node.js)+ mongodb 在单个 Heroku dyno 上实现了一些用户身份验证,并且一切正常。但是,当我增加测功机的数量(超过 1 个)时,我无法登录,我一直被重定向到我的登录页面,这意味着我的 session 尚未设置。这是我的代码:

checkCookies = function(req, res, next) {

  if(req.session.user){
   res.locals.user = req.session.user;
   next();
  }
  else{
    res.redirect('/login');
  }
};
app.use(express.cookieParser());
  app.use(express.session({ secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK',
  cookie: {httpOnly: true, maxAge:14*24*60*60*1000}
  }));

使用 mongodb 在 express/node.js 上处理共享 session 的最佳解决方案是什么?

最佳答案

以上答案具有误导性,因为它们暗示您不能在 Heroku 上的多个测功机之间共享基于 cookie 的 session 。

如果我使用 cookie-session,我可以跨多个测功机使用基于 cookie 的 session 而不是 express-session .该线程的第一篇文章中缺少的是 secret 值未传递给 cookie 解析器。这意味着每次进程重新启动或新的 dyno 启动时, Node 都会为解析器分配一个随机哈希。

为我做以下工作:

app.use(express.cookieParser('0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK'))
app.use(express.session({
  secret: '0GBlJZ9EKBt2Zbi2flRPvztczCewBxXK',
  cookie: { httpOnly: true, maxAge: 14 * 24 * 60 * 60 * 1000 },
}))

关于node.js - 在多个 dynos heroku 应用程序的 express 应用程序上设置 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17308935/

相关文章:

node.js - 如何使用 nodeJS 连接到隐式 FTPS 服务器?

javascript - 连接到 mongodb 模块 - NodeJS

mongodb - 使用 C# 驱动程序在嵌套的 mongo 集合中添加新对象

node.js - 在 Mongoose 中,如何仅删除集合中找到的一个文档?

java - 如何从 Spring Security 中的 java 代码登录用户?

Java- session 超时限制的可行性

javascript - 如何在不丢失数据的情况下将 POST 正文数据传递到另一条路线?

javascript - Node JS 查找连接到本地网络的所有设备

JavaScript NodeJs - 如何重构这一点

php - 'session.gc-maxlifetime' 始终为默认值