NodeJs 快速会话选项
NodeJs express-session options
我想使用 express-session 模块创建一个登录系统。我不确定我是否做对了,我对秘密选项感到困惑。我目前为 express-session 初始化是这样的:
app.use(session({
secret: 'important',
resave: true,
saveUninitialized: true,
genid: function(req) {
return uuidv4();
}
}));
而且我读到秘密参数仅用于 cookie (Link),但我不想使用 cookie。我只想使用会话。
我现在可以忽略秘密参数吗?
简短回答:否。您需要使用 cookie。
当您在会话中存储数据时,它会被放置在服务器上与代表用户的标识符相关联的存储区域中。
当浏览器向服务器发出请求时,服务器需要某种方式来告知使用哪个存储区域。它通过将标识符放在 cookie 中并将其提供给浏览器(然后将其包含在每个后续请求中,直到浏览器关闭)来实现。
如果您真的、真的不想使用 cookie,那么您将不得不使用其他机制将令牌包含在来自浏览器的每个请求中,例如将其放入每个 URL。这就是 PHP 所做的,如果你 use trans_sid ......并且被认为是一个坏主意:
URL based session management has additional security risks compared to cookie based session management.
除了之外,如果你想保密(因为它是一个开源项目,你不想把它放在public中),你可以使用环境变量。
这应该可以解决您的问题:
secret: process.env.MY_SECRET || "secret"
如果设置了环境变量,将使用它的值。否则,将使用字符串 "secret"
。
由于这是一个重要的字段,用户应该设置它,您可以稍后检查是否设置了环境变量并相应地警告用户。
我想使用 express-session 模块创建一个登录系统。我不确定我是否做对了,我对秘密选项感到困惑。我目前为 express-session 初始化是这样的:
app.use(session({
secret: 'important',
resave: true,
saveUninitialized: true,
genid: function(req) {
return uuidv4();
}
}));
而且我读到秘密参数仅用于 cookie (Link),但我不想使用 cookie。我只想使用会话。
我现在可以忽略秘密参数吗?
简短回答:否。您需要使用 cookie。
当您在会话中存储数据时,它会被放置在服务器上与代表用户的标识符相关联的存储区域中。
当浏览器向服务器发出请求时,服务器需要某种方式来告知使用哪个存储区域。它通过将标识符放在 cookie 中并将其提供给浏览器(然后将其包含在每个后续请求中,直到浏览器关闭)来实现。
如果您真的、真的不想使用 cookie,那么您将不得不使用其他机制将令牌包含在来自浏览器的每个请求中,例如将其放入每个 URL。这就是 PHP 所做的,如果你 use trans_sid ......并且被认为是一个坏主意:
URL based session management has additional security risks compared to cookie based session management.
除了
这应该可以解决您的问题:
secret: process.env.MY_SECRET || "secret"
如果设置了环境变量,将使用它的值。否则,将使用字符串 "secret"
。
由于这是一个重要的字段,用户应该设置它,您可以稍后检查是否设置了环境变量并相应地警告用户。