【问题标题】:NodeJs express-session optionsNodeJs 快速会话选项
【发布时间】:2018-06-30 21:32:25
【问题描述】:

我想使用 express-session 模块创建一个登录系统。我不确定我是否都正确,并且我对秘密选项感到困惑。我目前对快速会话的初始化是这样的:

app.use(session({
   secret: 'important',
   resave: true,
   saveUninitialized: true,
   genid: function(req) {
       return uuidv4();
   }
}));

我已经读到秘密参数仅适用于 cookie (Link),但我不想使用 cookie。我只想使用会话。

我现在可以忽略秘密参数吗?

【问题讨论】:

  • 会话ID存储在cookies中
  • 这意味着我应该写这样的东西?秘密:uuidv4(),
  • 不行。使用某种字符串并将其保存在环境中。
  • 但我不能保密,因为它是一个开源项目。还有其他解决方案吗?

标签: javascript node.js express session express-session


【解决方案1】:

除了Quentin has pointed out 之外,如果你想保密(因为它是一个开源项目,你不想公开它),你可以使用环境变量。

这应该可以解决您的问题:

secret: process.env.MY_SECRET || "secret"

如果设置了环境变量,将使用它的值。否则,将使用字符串"secret"

由于这是一个重要的字段,用户应该设置它,您可以稍后检查环境变量是否设置并相应地警告用户。

【讨论】:

    【解决方案2】:

    简短回答:不。您需要使用 cookie。


    当您在会话中存储数据时,它会被放置在与代表用户的标识符相关联的服务器上的存储区域中。

    当浏览器向服务器发出请求时,服务器需要某种方式来告知要使用哪个存储区域。它通过将标识符放入 cookie 并将其提供给浏览器(然后将其包含在每个后续请求中,直到浏览器关闭)来实现。


    如果您真的不想使用 cookie,那么您将不得不使用其他机制将令牌包含在来自浏览器的每个请求中,例如将其放入每个 URL。如果你 use trans_sid ……这就是 PHP 所做的事情,这被认为是个坏主意:

    与基于 cookie 的会话管理相比,基于 URL 的会话管理具有额外的安全风险。

    【讨论】:

    • 好的,那么我需要 cookie。但这是一个开源项目,我不能将“秘密”选项保密。我该怎么做?
    • @LukasGund,我建议你把它写成secret: process.env.MY_SECRET || "secret"你可以要求用户设置环境变量,否则将使用默认字符串"secret"
    猜你喜欢
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多