【问题标题】:nodejs - heroku - express-sessionsnodejs - heroku - 快速会话
【发布时间】:2018-08-04 13:57:54
【问题描述】:

我正在使用 expressjs 在 nodejs 中构建一个网站,并且我正在使用 express-sessions 来处理用户会话。这是我的代码。

在应用启动的 app.js 文件上。

app.use(express.static(path.join(__dirname, 'public')));
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(cors());

app.use(session(config.sessionConfig));

app.use(override());

config.sessionConfig 对象在这里

  sessionConfig : {
    secret: 'shhSecrt',
    store: new MongoStore({ url:dbUrl+dbName}),
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true }
  }

问题是,当我将它部署到 heroku 时,req.session 变量似乎并没有保持其状态。 更具体地说,当用户注册时,我将例如他的用户名存储在 req.session.usernname 变量中,但是在用户执行下一个请求时,req.session.username 未定义,不是因为它没有存储在数据库中,但是因为服务器无法识别他的会话! 我不知道为什么,我已经尝试解决它 2 天,但我无法弄清楚。此外,当我在 localhost 中运行应用程序时,一切正常。 请帮忙!! 谢谢!

*如果您需要更多信息或代码示例,请告诉我。

【问题讨论】:

  • 您的 Mongo 商店使用什么模块?
  • 好问题,我正在使用 connect mongo。
  • 我也在内存上尝试了存储会话,但它仍然不起作用!

标签: node.js heroku express-session


【解决方案1】:

我遇到了类似的问题,以下是我需要的修复。也许你的类似:

https://github.com/expressjs/session/issues/633

该解决方案引用了文档中的一条关键信息:

将信任代理设置为高并保护 cookie 允许 cookie 在 Heroku 上为我保留。

【讨论】:

    【解决方案2】:

    我也面临同样的问题,并认为这可能是一个错误......但我发现像下面这样设置会话

    app.set('trust proxy', 1)
    app.use(session({
      resave: false,
      saveUninitialized: true,
      secret: 'your secret text',
      cookie: {
        secure: (process.env.NODE_ENV && process.env.NODE_ENV == 'production') ? true:false
      }
    }))
    

    解决了这个问题:D

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      • 2019-12-29
      相关资源
      最近更新 更多