代码之家  ›  专栏  ›  技术社区  ›  Lukas Gund

NodeJs express会话选项

  •  0
  • Lukas Gund  · 技术社区  · 7 年前

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

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

    我读到这个秘密参数只用于cookies( Link )但是我不想用饼干。我只想使用会话。

    现在可以忽略secret参数吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Dushyant Bangal    7 年前

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

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

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

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

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

        2
  •  0
  •   Quentin    7 年前

    简短回答:没有。你需要使用cookies。


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

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


    如果你真的,真的不想使用cookie,那么你必须使用一些其他的机制,在来自浏览器的每个请求中包括令牌,比如将其放在每个URL中。如果您 use trans_sid 这被认为是个坏主意:

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